繁体   English   中英

zeromq 同时订阅和发布

[英]zeromq subscribe and publish simultaneously

我试图在 debian/multiprocess 情况下使用 zeromq 和 python。 我有几个进程解码来自多个传感器的原始数据,并在 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

我阅读了文档、谷歌等,但现在完全卡住了。

您尝试绑定到同一个端口 (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相同,那么相同的进程会监听它自己发布的消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM