客户端未检测到服务器断开连接



在我的应用程序(c++(中,我有一个服务公开为:

grpc-foo(流请求(返回(回复({}

问题是,当服务器停机(CTRL-C(时,客户端的流实际上一直在上运行

grpc::ClientWriter::写入

不会返回false。我可以确认,使用netstat,我看不到客户端和服务器之间有任何连接(除了一个TIME_WAIT连接,它过了一段时间就消失了(,客户端一直在调用Write,没有出现错误。

是否有一种方法可以查看基础连接是否仍在运行,而依赖于Write返回值?我使用grpc 1.12版

更新

我发现底层通道处于IDLE状态,但ClientWriter::Write仍然没有报告错误,我不知道这是否是故意的。在流传输过程中,每当信道状态不是GRPC_channel_READY 时,我都会尝试重新建立与服务器的连接

这可能发生在少数情况下,但最常见的因素是连接问题。我们在gRPC中提供了KEEPALIVE支持来解决这个问题。对于C++,请参阅https://github.com/grpc/grpc/blob/master/doc/keepalive.md关于如何设置。从本质上讲,端点会以特定的间隔发送ping,并期望在特定的时间范围内得到回复。

最新更新