ZeroMQ:发送前必须休眠

问题描述 投票:0回答:1

我正在使用转发器设备(使用 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)

子.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
?谢谢。

python zeromq pyzmq
1个回答
11
投票

这被称为“慢加入者”综合症。阅读指南,有一些方法可以使用节点协调来避免它。

© www.soinside.com 2019 - 2024. All rights reserved.