Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ZeroMQ PubSub不工作w\Pyzmq_Python_Zeromq_Publish Subscribe_Pyzmq - Fatal编程技术网

Python ZeroMQ PubSub不工作w\Pyzmq

Python ZeroMQ PubSub不工作w\Pyzmq,python,zeromq,publish-subscribe,pyzmq,Python,Zeromq,Publish Subscribe,Pyzmq,我可能遗漏了一些非常小的东西,但是我无法使用官方的Pyzmq包()在Python中获得一个简单的pub-sub示例 我使用的是最新的ZeroMQ稳定版4.0.3,我能够得到一个简单的例子,在c语言中非常容易地工作。我在Mac和Ubuntu机器上都试过了。我期待任何关于这方面的意见;) 这是我的密码: sub.py 酒吧 假设您先启动订阅服务器,然后启动发布服务器,订阅服务器将永远尝试连接到发布服务器。当publisher出现时,订阅服务器端的连接过程需要一些时间,而您的publisher并不真正

我可能遗漏了一些非常小的东西,但是我无法使用官方的Pyzmq包()在Python中获得一个简单的pub-sub示例

我使用的是最新的ZeroMQ稳定版4.0.3,我能够得到一个简单的例子,在c语言中非常容易地工作。我在Mac和Ubuntu机器上都试过了。我期待任何关于这方面的意见;)

这是我的密码:

sub.py

酒吧


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

解决方案:通过在发布服务器代码中添加睡眠,给订阅服务器一些时间:

导入zmq
导入时间
ctx=zmq.Context()
s=ctx.socket(zmq.PUB)
s、 绑定(“tcp://*:5567”)
时间。睡眠(1)
对于范围(100)内的i:
s、 发送(“测试”)

就是这样。非常感谢。正如@Stephen所说,为什么C版本可以工作?有没有办法摆脱这种黑客行为,同时保留将多个出版商连接到一个订户的能力?(唉,没有
zmq.PAIR
)非常丑陋的解决方案:(haskell绑定也有同样的问题;同样的解决方案:(
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
import zmq

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

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