我已经使用 zmq 4.0.4 实现了一个简单的 ZeroMQ Pub/Sub 架构。一切正常,sub's 接收来自酒吧的消息。
一切都很棒,我喝了很多啤酒而高兴。
然而.. 24 小时后,sub & pub 通过不可靠的网络连接保持空闲状态,sub 无法从酒吧接收任何消息。在与 pub 连接后,我能够通过暂时阻止 sub 与 pub 的连接端口来重现该问题。在防火墙后面的时间里,sub 不仅错过了所有消息(由于 pub/sub 的性质预计),而且在此之后它也无法从 pub 接收任何消息。
发布了一个类似(但旧)的问题,当发生这种情况时,该问题实际上使子程序抛出异常。但似乎是一个已修复的错误。 失去网络连接时ZMQ Pub-Sub程序失败
如果没有实现心跳来确定连接是否被切断,当与酒吧的连接被切断时,有没有办法让 sub 自动重新连接?
在zmq 核心 github 页面上发布了一个问题,并由项目所有者回答。
PUB 套接字可能会看到错误,而 SUB 套接字没有。
ZMTP RFC 有一个关于心跳的提议可以解决这个问题。当前最好的解决方案是当流量低时 PUB 套接字发送心跳(例如每秒 1 个),如果 SUB 套接字停止获取这些心跳,则断开/重新连接。
实现了一个简单的心跳,它就像一个魅力。