React 中的 gRPC 流式处理未按预期工作
Posted
技术标签:
【中文标题】React 中的 gRPC 流式处理未按预期工作【英文标题】:gRPC Streaming In React Not Working As Expected 【发布时间】:2020-02-12 12:30:16 【问题描述】:我正在尝试在我的 react 应用中测试 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 然后是8 lines of responses
。
如前所述,在 Bloom 中,它按预期每 2 秒成功发送一个新流。与我的 React 应用不同,它只是等待很长时间,然后立即触发 on data
回调 8 次。
在我的“网络”选项卡中,StreamEvents 也处于等待启动状态 +- 15 秒。
【问题讨论】:
问题描述中没有提到 - 您使用的是哪个 grpc-web 代理? 据我所知只是默认的。 【参考方案1】:您需要确保您使用的是 grpc-web 的文本模式,因为二进制格式目前不支持正确的流式传输:
https://github.com/grpc/grpc-web/issues/344#issuecomment-433288348
【讨论】:
是的,这不是问题,我们已经在使用mode=grpcwebtext
啊,对了,我们原型中的 JS 输出仍然设置了二进制模式。我的错......谢谢这个排序它!
@BarryMichaelDoyle 你能帮我理解你是如何以及在哪里改变它的,所以原型没有设置二进制模式吗?谢谢 -
我在 protoc -I=.... 中为我的生成脚本做的。
我正在使用这个协议命令:protoc -I=。 src/ping_pong.proto --js_out=import_style=commonjs:。 --grpc-web_out=import_style=commonjs,mode=grpcwebtext:.以上是关于React 中的 gRPC 流式处理未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章
react-native NavigatorIOS 未按预期工作
嵌套路由(React-Router-Dom 6.0.2)未按预期工作
React 路由器:userHistory 推送功能未按预期工作