6

Forwarder デバイス (pyzmq を使用) を使用して zeromq デモを作成しています。

コードは次のとおりです ( https://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/devices/forwarder.htmlへの参照):

フォワーダー.py

import zmq

context = zmq.Context()
frontend = context.socket(zmq.SUB)
frontend.bind('tcp://*:5559')
frontend.setsockopt(zmq.SUBSCRIBE, '')

backend = context.socket(zmq.PUB)
backend.bind('tcp://*:5560')

zmq.device(zmq.FORWARDER, frontend, backend)

sub.py

import zmq

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect('tcp://localhost:5560')
socket.setsockopt(zmq.SUBSCRIBE, '')

while True:
    print socket.recv()

pub.py

import zmq, time

context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.connect('tcp://localhost:5559')
# time.sleep(0.01)
socket.send('9 hahah')

ターミナルでpython forwarder.py実行しますpython sub.py

次に実行するpython pub.pyと、サブスクライバーはメッセージを取得できません。ただし、送信前に少し(たとえば0.01秒)スリープすると機能します。

だから私の問題は、なぜsleep送信する前に持っているのですか? ありがとう。

4

1 に答える 1

11

スロージョイナー症候群として知られています。ガイドを読んでください。pub/sub syncingを使用して回避する方法があります。

于 2013-10-18T13:40:34.300 に答える