gRPC 客户端如何了解网络丢失/故障?

How can gRPC client know about network loss/failure?

提问人:Ozturk 提问时间:10/15/2020 更新时间:10/16/2020 访问量:1315

问:

使用 grpc 在 java 项目中有一个服务器端流式处理。当服务器和客户端之间的网络中断时,客户端甚至不知道问题所在,streamobserver 处于空闲状态,没有活动。我怎么知道这种断开连接?

Java Stream gRPC 服务器端

评论

0赞 GhostCat 10/15/2020
一种方法是让双方每 X 秒左右发送一次“心跳”信息。当这些停止进来时,你就知道有些事情不是它应该的那样。当然,它只会告诉你没有更多的心跳进来,而不是为什么会这样。

答:

1赞 voidzcy 10/16/2020 #1

在发送消息之前,您不知道连接已断开。这就是TCP协议的工作原理

因此,如果您正处于服务器端流式传输过程中,突然拔掉了调制解调器的插头,则客户端永远不会知道,直到操作系统关闭套接字(可能需要几分钟)。

您可以更改为实现双向流式处理,即客户端定期发送请求,以便在尝试写入套接字时了解网络故障,也可以启用 keepAlive