【发布时间】:2018-11-16 15:37:05
【问题描述】:
在我的应用程序 (c++) 中,我有一个服务公开为:
grpc foo(stream Request) 返回 (Reply) { }
问题是当服务器关闭时(CTRL-C),客户端的流确实会继续运行
grpc::ClientWriter::Write
不返回假。我可以确认使用 netstat 我看不到客户端和服务器之间的任何连接(除了一个 TIME_WAIT 一段时间后消失的连接)并且客户端继续调用该 Write 而没有错误。
有没有办法查看底层连接是否仍在运行而不是依赖于写入返回值?我使用 grpc 版本 1.12
更新
我发现底层通道处于 IDLE 状态,但 ClientWriter::Write 仍然没有报告错误,我不知道这是不是有意的。在流式传输期间,我现在尝试在每次通道状态不是 GRPC_CHANNEL_READY 时重新建立与服务器的连接
【问题讨论】:
-
您可以使用定期发送的某种“存在”消息覆盖协议吗?
-
我可以,但那是“黑客”
-
我发现底层通道进入了IDLE状态,但是ClientWriter::Write仍然没有报错,我不知道这是不是有意的。在流式传输期间,我现在正在尝试重新建立与服务器的连接。