我正在使用ZeroMQ来促进我需要的发布/订阅环境。我正在使用Python(使用EventLoop)在机器A上运行发布服务器,现在我在机器B上使用C ++运行一个订户,在机器C上运行Python(使用EventLoop)的第二个订户。
如果机器B在机器C之前订阅了机器A,那么B获得订阅的消息而C则没有。此外,如果我查看机器A上已建立的连接,那么机器B只存在一个连接而不存在C的连接。如果机器C在B之前订阅了A,那么它就是另一种方式。
这是我的发布商代码:
import zmq
from zmq.eventloop import ioloop, zmqstream
ioloop.install()
context = zmq.Context(1)
socket = context.socket(zmq.PUB)
publisher = zmqstream.ZMQStream(socket)
socket.bind("tcp://*:1337")
def publish():
publisher.send_multipart(("heartbeat", "OHAI"))
ioloop.PeriodicCallback(publish, 5000).start()
ioloop.IOLoop.instance().start()
这是我的Python订阅者代码:
import zmq
from zmq.eventloop import ioloop, zmqstream
ioloop.install()
context = zmq.Context(1)
socket = context.socket(zmq.SUB)
subscriber = zmqstream.ZMQStream(socket)
socket.setsockopt(zmq.SUBSCRIBE, "heartbeat")
socket.connect("tcp://pub.local:1337")
def subscription(message):
print "Message Received: %s" % (message[1])
subscriber.on_recv(subscription)
ioloop.IOLoop.instance().start()
为什么我的发布商不接受多个传入的订阅者套接字?值得注意的是,多个用户在机器A上运行它们时工作正常,但我认为这不是防火墙问题,因为我测试了从B和C到A的用户连接,并禁用了防火墙。
答案 0 :(得分:5)
感谢所有人对原始帖子中所有有用的评论。这种行为原因是由于使用的ZeroMQ版本不匹配......我的疏忽。