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

Bry*_*yan 8 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()
Run Code Online (Sandbox Code Playgroud)

这是我的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()
Run Code Online (Sandbox Code Playgroud)

为什么我的发布者不接受多个传入的订阅者套接字?值得注意的是,多个用户在机器A上运行它们时工作正常,但我不认为这是防火墙问题,因为我测试了B和C的用户连接到A,防火墙被禁用.

Bry*_*yan 5

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