gpt4 book ai didi

python - ZeroMQ:多个远程(LAN)发布者

转载 作者:太空狗 更新时间:2023-10-30 01:16:28 28 4
gpt4 key购买 nike

我有一个基本的 ZeroMQ 场景,由两个发布者和一个订阅者组成。在我决定将局域网内不同计算机上的所有进程分开之前,这在本地计算机上一直运行良好。这就是我创建 ZeroMQ 套接字的方式(简化的 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")

订阅者代码:

context = zmq.Context()
self.sub_socket = context.socket(zmq.SUB)
self.sub_socket.bind("tcp://192.168.1.52:5556")
self.sub_socket.setsockopt(zmq.SUBSCRIBE, "")

我已经尝试输入 tcp://127.0.0.1:5556 作为订阅者的绑定(bind) address:port 但这没有任何区别。

最佳答案

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

首先我会检查你是否可以在两台机器之间做一个简单的请求/代表:

# 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()

如果您遇到问题,那么您可能需要检查这些端口。

其次,您还可以尝试绑定(bind)到所有接口(interface):socket.bind("tcp://*:5556")

对于你的实际目标,如果你只需要一个多发送者/单一接收者,你可以只使用 PUSH/PULL 而不是 PUB/SUB

# one receiver
import zmq
context = zmq.Context()
socket = context.socket(zmq.PULL)
socket.bind("tcp://*:5556")

while True:
print socket.recv()

# many senders
import zmq
context = zmq.Context()
socket = context.socket(zmq.PUSH)
socket.connect("tcp://192.168.1.52:5556")
socket.send("FOO")

关于python - ZeroMQ:多个远程(LAN)发布者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13324183/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com