6

我可能缺少一些非常小的东西,但我无法使用官方 Pyzmq 包(https://github.com/zeromq/pyzmq)在 Python 中获得一个简单的 pub-sub 示例。

我正在使用最新的 ZeroMQ 稳定版 4.0.3,并且能够在 c 中轻松获得一个简单的示例。我在 Mac 和 Ubuntu 机器上都试过了。我期待对此的任何意见;)

这是我的代码:

子.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

发布.py

import zmq

ctx = zmq.Context()
s = ctx.socket(zmq.PUB)
s.bind("tcp://*:5567")

for i in range(100):
    s.send("test")
4

1 回答 1

11

假设您先启动订阅者然后发布发布者,订阅者将永远尝试连接到发布者。当发布者出现时,订阅者端的连接过程需要一些时间,而您的发布者并不真正关心这一点。虽然它会尽快触发消息,但订阅者正在尝试建立连接。当连接建立并且订阅者准备好接收时,发布者已经完成了它的工作。

解决方案:通过向发布者代码添加睡眠来给​​订阅者一些时间:

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")
于 2013-12-18T13:03:51.213 回答