ZeroMQ Pub/Sub不可靠连接

问题描述:

我已经使用zmq 4.0.4实现了一个简单的ZeroMQ Pub/Sub体系结构。一切都很好,sub从酒吧接收消息。ZeroMQ Pub/Sub不可靠连接

一切都很好,我很高兴与许多啤酒。

但是,如果在保留子&酒吧的空闲时间超过一个不可靠的网络连接后24小时内,该子无法接收来自酒吧的任何消息。在与酒吧连接之后,我可以通过暂时阻止酒吧的连接端口来重现问题。不仅在防火墙后面的时间内丢失了所有消息(预计由于pub/sub的性质),而且在此之后它也没有收到来自pub的ANY消息。

当发生这种情况时,发布了一个类似的(但是旧的)问题,实际上该子抛出异常。但似乎是一个固定的错误。 ZMQ Pub-Sub Program Failure When Losing Network Connectivity

执行心跳以确定连接是否被切断的缺点是否有任何方式使子连接在与连接断开时自动重新连接?

+0

如果它不是自动重新连接,那么你唯一的选择就是心跳。重新连接应该是ZMQ套接字的“魔力”的一部分,如果没有发生,那么某个地方会出现某种情况。 – Jason 2014-09-30 17:13:49

+1

实现心跳,它的功能就像一个魅力..然而,我很惊讶,当ZMQ不能重新连接时,它不会抛出错误(或事件) – 2014-09-30 17:58:52

+0

ZMQ是一个非常多的工具集,用于构建通信系统超过完整通信系统本身,所以毫无疑问,这被认为是开发者的责任,而不是图书馆的责任......但是,这是一个相当开放的社区,所以如果有人想要将这个功能添加到图书馆,它会可能在那里:) – Jason 2014-10-01 16:19:16

zmq core github page上发布了一个问题,并由项目所有者回答。

有可能是PUB插座看到错误,而SUB插座不是 。

ZMTP RFC有一个心跳提议,可以解决这个问题。 目前最好的解决方案是PUB插座在流量较低时发送心跳(例如,每 秒),并且如果SUB插座断开/重新连接 (如果他们停止接收这些信号)。

实现了一个简单的心跳,它的工作就像一个魅力。

More Info Here

+0

我知道它迟到的方式,但你会介意构成一个听力代码片段?请好吗? – theannouncer 2015-12-10 03:06:55

+1

肯定嘛!我遇到这个问题时,实际上是在图书馆里写的。 https://github.com/moappi/zeromq.process。如果您希望使用ZeroMQ处理某些内容,请查看心跳部分或随意使用该库 – 2015-12-11 22:21:01