ZeroMQ PUB / SUB-почему не будет работать несколько подписчиков?

Я использую ZeroMQ для облегчения среды публикации / подписки, которая мне нужна. Я запускаю сервер публикации на машине A, используя Python (используя EventLoop), и прямо сейчас у меня есть один подписчик, работающий на C++ на машине B, и второй подписчик, работающий на Python (используя EventLoop) на машине C.

Если машина B подписывается на машину A до машины C, то B получает подписанные сообщения, а C нет. Кроме того, если я посмотрю на установленные соединения на машине A, там существует только соединение для машины B, но не для C. Если машина C подписывается на A до B, то это наоборот.

вот мой код издателя:

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 ответов


спасибо всем за все полезные комментарии в исходном постинге. Это поведение оказалось связано с несоответствием в используемых версиях ZeroMQ... оплошность с моей стороны.