python - zeromq 同时订阅和发布

标签 python linux zeromq publish-subscribe

我正在尝试在 debian/多进程情况下使用 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

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

最佳答案

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

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

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 相同,然后相同的进程会监听它自己发布的消息。

关于python - zeromq 同时订阅和发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12676694/

相关文章:

python - 了解CPU和进程之间的关系

c++ - 选择嵌入式语言

linux - Errr 'mongo.js:L112 Error: couldn' t 连接到服务器 127.0.0.1 :27017 at src/mongo/shell/mongo. js:L112'

c++ - 如何将所有 3rdparty 运行时依赖项包含到 linux 上的 cmake/cpack 生成的包中?

node.js - 如何让 ROUTER -> DEALER 进行回显?

python - 由于链接 gdbm 链接问题,Brew 安装 Python 失败

python - 曲线拟合问题,exp遇到溢出

c - 警告 : format ‘%s’ expects argument of type ‘char *’ , 但参数 2 的类型为 ‘__dev_t’ [-Wformat=]

linux - 使用 ZeroMQ 流连接到设备失败,但 Linux 套接字工作

jms - ActiveMQ 或 RabbitMQ 或 ZeroMQ 或