客户端流的官方 gRPC 文档指出:
The server sends back a single response, typically but not necessarily after it has received all the client’s requests...
我正在尝试做的是在流中间捕获服务器响应以停止发送更多数据。
在 Go 中,我可以使用 RecvMsg 启动一个新的 goroutine 监听来自服务器的消息,但我找不到在 C++ 中执行相同操作的方法。看起来像 ClientWriter不提供这种功能。
一个解决方案是拥有一个双向流,但想知道是否有任何其他方法可以在 C++ 中实现这一点。
最佳答案
一旦响应和状态由服务器发送并在客户端(即客户端 gRPC 堆栈)接收回来,后续对 Write() 的尝试将开始失败。第一次失败的 Write() 是给客户端的信号,它应该停止写入并完成 RPC。
所以这里的两个选项是: 1.等待Write失败,然后调用finish接收Server的响应和状态。 2. 如果客户端真的想在调用 Finish 之前从服务器读取响应,请切换到双向流。
关于c++ - gRPC 客户端流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52841895/