ZeroMQ:多个远程(局域网)发布者

2024-09-29 06:25:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个基本的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,但这没有什么区别。在


Tags: 代码self服务器进程计算机context场景socket
3条回答

我怀疑你的问题可能与机器之间端口的开放有关。有些操作系统有自己的软件防火墙,因此您可能需要检查是否需要打开它们。在

首先,我要检查您是否可以在两台机器之间执行一个简单的req/rep:

# machine 1
import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5556")
req = socket.recv()
socket.send(req) 

# machine 2
import zmq
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://192.168.1.52:5556")
socket.send("FOO")
print socket.recv()

如果您对此有问题,那么您可能需要检查这些端口。在

其次,您还可以尝试使用以下命令绑定到所有接口: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协议是版本不可知的。下次要记住这一点。在

再次感谢!在

相关问题 更多 >