ZeroMQ PUB / SUB - 为什么多个用户不会工作?

时间:2012-10-22 20:58:15

标签: zeromq

我正在使用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的用户连接,并禁用了防火墙。

1 个答案:

答案 0 :(得分:5)

感谢所有人对原始帖子中所有有用的评论。这种行为原因是由于使用的ZeroMQ版本不匹配......我的疏忽。