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... оплошность с моей стороны.