ZMQ 模式 Dealer/Router 心跳

ZMQ Pattern Dealer/Router HeartBeating

我在客户端有一个 Dealer 套接字,它连接到服务器端的 Router 套接字。

我经常看到心跳机制:服务器定期向客户端发送消息,以便客户端知道他是否正确连接到服务器,如果客户端在一段时间内没有收到消息,可以重新连接。

例如这里的偏执海盗模式:http://zguide.zeromq.org/page:chapter4

但经过一些测试:如果客户端暂时断开与服务器的连接并再次找到它,客户端会自动重新连接到服务器套接字(他收到发送的消息...)。

我想知道在什么情况下需要心跳?

不需要心跳来保持连接(TCP 套接字有一个 ZMQ_TCP_KEEPALIVE 套接字选项)。相反,双方都需要心跳才能知道对方仍然处于活动状态。如果任何一方确实检测到另一方处于非活动状态,它可以采取替代行动。

在activity可能是因为某个进程死掉了,死锁了,在网络activity之间做了太多的工作,或者网络故障等等。从其他方面来看,都是如果没有更多信息,这些场景是无法区分的。

在网络中,进行设计工作是比较容易的部分。最困难的部分是处理失败。您必须考虑尽可能多的可能故障模式,并在设计协议中处理它们。心跳通常是这些协议中的一个有用部分。例如,它们比尝试通过使用监视器事件来确定套接字是否仍在运行要有用得多。

话虽如此,如果您的应用程序不需要任何特定级别的可靠性;也许您可以在发生故障时重新启动设备。那么你可能不需要担心心跳。毕竟,指南中有很多不使用它的模式。这是课程的马。