我已经实现了一个 gRPC 服务器应用程序,多个客户端可以连接到它并调用 RPC。
在客户端断开连接或客户端重新启动的情况下,我想知道哪个客户端断开连接,以便我可以针对该客户端进行一些清理。
同样,如果服务器宕机,客户端如何得到通知?
gRPC c++ 堆栈是否向应用程序提供通知/回调?如果不是,那么处理任何一方的连接终止的最佳方法是什么?
最佳答案
Tcp 是一个空闲协议(protocol),因此为了检测断开的连接,您必须实现某种类型的 ping/pong 和计时器来抛出断开的连接,因此您应该执行以下操作:
在一侧(例如客户端):
在另一边(例如服务器):
除此之外,任何来自读、写的错误(非阻塞错误和喜欢除外)都被视为断开连接。
请注意,ping 和 pong 很重要,因为您可以仅在需要时(完成某些工作时)发送其他消息,这可能需要很长时间,因此在此期间您应该 ping 服务器以检查它是否仍与您连接
关于c++ - 在 gRPC c++ 中,有没有办法在对等方断开连接时得到通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63374898/