我已经实现了一个 gRPC 服务器应用程序,多个客户端可以连接到它并调用 RPC。在客户端断开连接或客户端重新启动的情况下,我想知道哪个客户端断开连接,以便我可以执行与该客户端对应的一些清理操作。
同样,如果服务器出现故障,客户端如何得到通知?
gRPC C++ 堆栈是否向应用程序提供通知/回调?如果不是,处理双方连接终止的最佳方法是什么?
Tcp 是一个空闲协议,因此为了检测断开的连接,您必须实现某种类型的 ping/pong 和计时器来抛出断开的连接,因此您应该执行以下操作:
一侧(例如客户端):
在另一端(例如服务器):
除此之外,任何来自读取、写入的错误(非阻塞错误等除外)都被视为断开连接。
请注意,ping 和 pong 很重要,因为您可能只在需要时(完成某些工作时)发送其他消息,这可能需要很长时间,因此在此期间您应该 ping 服务器以检查它是否仍然与您保持连接