zeromq同时订阅和发布

时间:2012-10-01 15:51:24

标签: python linux zeromq publish-subscribe

我试图在python的debian / multiprocess情况下使用zeromq。我有几个进程解码来自众多传感器的原始数据,并在zmq中发布。到现在为止还挺好。 我有一个计算过程,它订阅zmq上的原始数据,并执行一些计算。然后,它需要发布其其他进程的答案以进行记录和使用。因此,我的计算过程需要在同一过程中订阅和发布。

import zmq
import json
context = zmq.Context()

sub = context.socket(zmq.SUB)
sub.setsockopt(zmq.SUBSCRIBE, '')
sub.setsockopt(zmq.RCVBUF, 0)
sub.bind("tcp://127.0.0.1:5000")

pub = context.socket(zmq.PUB)
pub.bind("tcp://127.0.0.1:5000")

我尝试了以上,但没有运气。它返回错误...

File "socket.pyx", line 465, in zmq.core.socket.Socket.bind (zmq/core/socket.c:4749)
zmq.core.error.ZMQError: Address already in use

我阅读了文档,google等,但现在完全被卡住了。

1 个答案:

答案 0 :(得分:2)

您尝试绑定到同一个端口(5000)两次,这会导致Address already in use错误 - 您只能将一个套接字绑定到一个端口。

但是sub套接字不应该bind(),它应该对另一个进程发布到的某个主机/端口执行connect()(即已完成bind() )。代码应该类似于:

sub = context.socket(zmq.SUB)
sub.setsockopt(zmq.SUBSCRIBE, '')
sub.setsockopt(zmq.RCVBUF, 0)
sub.connect("tcp://127.0.0.1:XXXX")

pub = context.socket(zmq.PUB)
pub.bind("tcp://127.0.0.1:YYYY")

我猜你并不是说端口XXXXYYYY是相同的,那么同一个进程会听取它自己发布的消息。