ZMQ模式经销商/路由器HeartBeating

时间:2015-04-24 08:28:00

标签: sockets client-server zeromq router heartbeat

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

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

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

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

我想知道在哪种情况下心跳是必要的?

1 个答案:

答案 0 :(得分:2)

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

不活动可能是因为一个进程已经死亡,它已陷入僵局,它在网络活动或网络故障等之间做了太多的工作。从另一方面来看,所有这些情况都没有更多的信息是无法区分的。

在网络中,进行设计工作很容易。绝大部分是处​​理失败。您必须考虑尽可能多的可能故障模式,并在设计协议中处理它们。心跳通常是这些协议中有用的部分。如果套接字仍然使用监视器事件,那么它们比试图解决它更有用,比如说。

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