我无法弄清楚grpc streaming. 我有一个场景,我有服务器端流,如果我从网络中删除客户端(通过拔出网络电缆,比如说),我没有收到任何错误或客户端或服务器端。有人可以在这里帮忙吗?如果我杀死服务器,客户端就会知道。如果我杀死客户端,服务器就会知道。但是断开连接没有得到识别。我很想知道为什么这不起作用以及在服务器或客户端被杀死的情况下它是如何工作的。是否发送了一些heartbeat消息来检查连接性或它是如何完成的?我的意思是,如果我每 30 秒发送一次数据,它是如何工作的?
2 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
如果中间网络路径暂时消失,互联网将无法工作。空闲网络连接应该能够容忍暂时的网络路径消失。
当任何一方断开连接时,您看到服务器/客户端连接中止的原因是因为从应用程序层(网络第 7 层)向下主动断开连接。断开物理电缆,仅切断物理网络层,其影响不一定向上级联,尤其是在空闲连接的情况下。
如果您的应用程序规范坚持一定程度的“活跃性”——比如说一个事件,甚至每 30 秒一次心跳——你可以确保服务器总是向NOPgRPC 流发送一个(心跳)。在这种情况下,服务器将在 30 秒内经历网络中断(更糟)。
类似地,如果您担心客户端可能正在等待不再可访问的连接,则可以在客户端使用计时器循环 go-routine 来取消连接上下文,如果记录(甚至是心跳)没有蜜蜂在最后 30 秒内收到。
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
gRPC 支持客户端和服务器之间的 keepalive: https ://godoc.org/google.golang.org/grpc/keepalive
- 2 回答
- 0 关注
- 206 浏览
添加回答
举报
0/150
提交
取消
