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

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

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

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

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

最佳答案

不需要心跳来保持连接有效(TCP套接字有一个ZMQ_TCP_KEEPALIVE套接字选项)。取而代之的是,双方都需要心跳才能知道对方仍处于 Activity 状态。如果任何一方确实检测到另一方未激活,则可以采取替代措施。

处于不 Activity 状态可能是因为进程已死亡,陷入僵局,在网络 Activity 或网络故障等之间进行了过多的工作。从另一方面来看,所有这些情况在没有更多信息的情况下是无法区分的。

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

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

关于sockets - ZMQ模式经销商/路由器心跳,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29842354/

10-10 11:48