ZeroMQ PubSub не работает с Pyzmq
Возможно, что-то очень маленькое, чего мне не хватает, но я не могу получить простой пример pub-sub, работающий на Python, используя официальный пакет Pyzmq ( https://github.com/zeromq/pyzmq).
Я использую последнюю стабильную версию ZeroMQ 4.0.3 и могу получить простой пример, работающий довольно легко в c. Я пробовал как на Mac, так и на Ubuntu. Я с нетерпением жду любых отзывов по этому вопросу;)
Вот мой код:
sub.py
import zmq
ctx = zmq.Context()
s = ctx.socket(zmq.SUB)
s.connect("tcp://127.0.0.1:5567")
s.setsockopt(zmq.SUBSCRIBE,'')
while True:
print 'waiting...'
msg = s.recv()
print 'received:', msg
pub.py
import zmq
ctx = zmq.Context()
s = ctx.socket(zmq.PUB)
s.bind("tcp://*:5567")
for i in range(100):
s.send("test")
1 ответ
Предполагая, что вы запускаете подписчика сначала, а затем издателя, подписчик вечно пытается соединиться с издателем. Когда появляется издатель, процедура подключения на стороне подписчика занимает некоторое время, и ваш издатель на самом деле не заботится об этом. В то время как это срабатывает с сообщениями, как только это возможно, абонент пытается установить соединение. Когда соединение установлено и подписчик готов к приему, издатель уже завершил свою работу.
Решение: дать абоненту некоторое время, добавив спящий код в код издателя:
import zmq
import time
ctx = zmq.Context()
s = ctx.socket(zmq.PUB)
s.bind("tcp://*:5567")
time.sleep(1)
for i in range(100):
s.send("test")