我有一个基本的ZeroMQ场景,由两个发布者和一个订阅者组成。这在本地计算机上运行得很好,直到我决定将局域网内不同计算机中的所有进程分开。Zerom是如何创建Python套接字的:
(在IP为192.168.1.52
的计算机上运行的订阅服务器进程)
发布者代码(两个发布者通用):
context = zmq.Context()
self.pub_socket = context.socket(zmq.PUB)
self.pub_socket.connect("tcp://192.168.1.52:5556")
用户代码:
^{pr2}$我尝试输入tcp://127.0.0.1:5556
作为订阅服务器的绑定address:port
,但这没有什么区别。在
我怀疑你的问题可能与机器之间端口的开放有关。有些操作系统有自己的软件防火墙,因此您可能需要检查是否需要打开它们。在
首先,我要检查您是否可以在两台机器之间执行一个简单的req/rep:
如果您对此有问题,那么您可能需要检查这些端口。在
其次,您还可以尝试使用以下命令绑定到所有接口:
socket.bind("tcp://*:5556")
对于您的实际目标,如果您只需要一个多个发送方/单个接收方,那么您可以使用PUSH/PULL而不是PUB/SUB
^{2}$你在ZMQ公会里走过了“Missing Message Problem Solver”吗?在
请注意,当使用PUB/SUB模式时,存在一种慢joiner综合征,它总是丢失一些消息。如果我们在SUB中连接,在PUB中绑定,那么这种症状就可以消除;但是,当有多个发布者时,订阅者需要连接到所有的发布者。在
谢谢你们的建议。在
防火墙确实被禁用,但最终找到了一台可以从两个发布服务器接收的PC。这似乎是一个与安装在每台计算机上的ZMQ版本有关的问题。发送者有2.2版,而接收者有2.1版。这很奇怪,因为我认为zmq协议是版本不可知的。下次要记住这一点。在
再次感谢!在
相关问题 更多 >
编程相关推荐