gpt4 book ai didi

c++ - 在 gRPC c++ 中,有没有办法在对等方断开连接时得到通知?

转载 作者:行者123 更新时间:2023-12-01 14:29:05 25 4
gpt4 key购买 nike

我已经实现了一个 gRPC 服务器应用程序,多个客户端可以连接到它并调用 RPC。
在客户端断开连接或客户端重新启动的情况下,我想知道哪个客户端断开连接,以便我可以针对该客户端进行一些清理。
同样,如果服务器宕机,客户端如何得到通知?
gRPC c++ 堆栈是否向应用程序提供通知/回调?如果不是,那么处理任何一方的连接终止的最佳方法是什么?

最佳答案

Tcp 是一个空闲协议(protocol),因此为了检测断开的连接,您必须实现某种类型的 ping/pong 和计时器来抛出断开的连接,因此您应该执行以下操作:
在一侧(例如客户端):

  • 你有一个等待一段时间(比如 1 分钟)的计时器
  • 对服务器的每次写入都将暂停计时器
  • 收到数据包时,您会更新上次收到数据包的时间
  • 当计时器到期时,您检查是否已达到 ping 时间(您一分钟内没有发送任何内容),如果是,则发送 ping 消息,服务器应回复。如果连接断开,您可能会在发送时收到错误。
  • 检查 ping 时间后,检查您上次收到数据包的时间,如果超过所选 session 超时(应该长于 ping 超时),则服务器无法响应您的消息,ping 所以断开连接

  • 在另一边(例如服务器):
  • 你有一个等待 session 超时的计时器
  • 对客户端的每次写入都将暂停计时器
  • 收到数据包时,您会更新上次收到数据包的时间
  • 一旦你得到一个 ping 发送一个 pong 消息通知客户端你仍然连接
  • 当计时器过期时,检查您上次收到数据包的时间,如果超过 session 超时,则客户端无法 ping 服务器或发送任何消息,因此假设客户端已断开连接并断开连接

  • 除此之外,任何来自读、写的错误(非阻塞错误和喜欢除外)都被视为断开连接。
    请注意,ping 和 pong 很重要,因为您可以仅在需要时(完成某些工作时)发送其他消息,这可能需要很长时间,因此在此期间您应该 ping 服务器以检查它是否仍与您连接

    关于c++ - 在 gRPC c++ 中,有没有办法在对等方断开连接时得到通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63374898/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com