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

时间:2018-11-16 15:37:05

标签: c++ grpc

在我的应用程序(c ++)中,我将服务公开为:

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

问题在于,当服务器关闭(CTRL-C)时,客户端的流确实在继续运行

grpc :: ClientWriter ::写

不返回false。我可以确认,使用netstat时,我看不到客户端与服务器之间的任何连接(除了TIME_WAIT之后一段时间后消失),并且客户端一直在调用该Write而没有错误。

有没有办法查看基础连接是否仍然存在,而是依靠Write返回值?我使用的是grpc 1.12版

更新

我发现基础通道处于IDLE状态,但是ClientWriter :: Write仍然没有报告错误,我不知道这是否是有意的。在流式传输期间,每次通道状态不是GRPC_CHANNEL_READY

时,我现在都尝试与服务器重新建立连接

1 个答案:

答案 0 :(得分:0)

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