首页 > 解决方案 > React 中的 gRPC 流式处理未按预期工作

问题描述

我正在尝试在我的反应应用程序中测试 gRPC 流。虽然我遇到了一些麻烦。我们已经测试了我们的流媒体,它每 2 秒成功地流式传输一个事件,最多 8 个流。

但是,当我在我的 React 应用程序中尝试它时,流开始,然后在相当长的一段时间内什么都没有发生(大约等于完成流式传输所有数据所需的时间),然后它只一次注销所有数据。

这就是我设置组件的方式:

const MyComponent = () => {
  const startStream = () => {
    console.log('stream start')
    const streamer = myService.testStreaming(new Empty(), {})
    streamer.on('error', err => console.log({ err }))
    streamer.on('status', status => console.log({ status }))
    streamer.on('data', response => console.log(response.toObject()))
    streamer.on('end', () => console.log('stream end'))
  }

  useEffect(() => {
    startStream()
  }, [])

  return null
}

如上所述,我的输出是stream start wait +- 15 seconds then 8 lines of responses

如前所述,在绽放中,它按预期每 2 秒成功发送一个新流。与我的 React 应用程序不同,它只是等待很长时间,然后on data立即触发回调 8 次。

盛开

安慰

在我的网络选项卡中,StreamEvents 也处于等待启动状态 +- 15 秒。

标签: reactjsstreaminggrpcgrpc-web

解决方案


您需要确保您使用的是 grpc-web 的文本模式,因为二进制格式目前不支持正确的流式传输:

https://github.com/grpc/grpc-web/issues/344#issuecomment-433288348


推荐阅读