在我的应用程序(c++)中,有一个服务公开为:
grpc foo(流请求)返回(答复){}
问题是,当服务器(CTRL-C)关闭时,客户端上的流确实会继续运行。
grpc::ClientWriter::Write
不会返回假的。我可以确认,使用netstat,我看不到客户机和服务器之间的任何连接(除了一段时间后消失的TIME_WAIT连接),并且客户机一直在调用该写入而没有错误。
是否有一种方法可以查看底层连接是否仍然处于上升状态,而依赖于写返回值?我使用grpc版本1.12
更新
我发现底层通道处于状态空闲状态,但仍然是ClientWriter::Write不报告错误,我不知道这是否有意。在流过程中,每次通道状态不是GRPC_CHANNEL_READY时,我都试图与服务器重新建立连接
发布于 2018-11-28 18:36:21
这种情况可能发生在一些场景中,但最常见的元素是连接问题。我们在gRPC中有KEEPALIVE支持来解决这个问题。对于C++,请参考https://github.com/grpc/grpc/blob/master/doc/keepalive.md,了解如何设置它。本质上,端点会在一定的时间间隔内发送pings,并期望在一定的时间范围内得到答复。
https://stackoverflow.com/questions/53341009
复制相似问题