如何使用两个发布者的同一端口来使用 ZeroMQ 向同一订阅者发送数据?
How to use same port for two publishers for sending data to the same subscriber using ZeroMQ?
我正在C++制作一个应用程序,其中两个发布者,例如pub1
和pub2
,应该将数据发送给3个订阅者,例如s1
,s2
,s3
。
模式如下:
Pub1
将数据发送到s1
并s2
Pub2
将数据发送到s2
和s3
现在,如果我为发布者使用不同的 TCP 端口,它就可以工作,但我需要使用单个端口来执行此操作,当对两个发布者使用相同的端口时,只有绑定的发布者首先工作,而另一个发布者抛出内存错误。
有什么想法吗?
在内部使用zmq::proxy
以允许多个发布套接字通过一个 TCP 端口提供数据。
P1(subject P1) -inproc-> | |--tcp-> SUB(P1)
|--XSUB(zmq::proxy)XPUB-|--tcp-> SUB(P1,P2)
P2(subject P2) -inproc-> | |--tcp-> SUB(P2)
方法:
发布者应用程序
- 两个
PUB
套接字(在发布商应用内),一个以主题"P1"发布,另一个以"P2"发布 - 它们都连接到应用程序内部的
XSUB
侧zmq::proxy
通过//:inproc
。代理也在发布者应用程序中运行 - 代理的另一端(
XPUB
端)绑定到单个TCP端口。
订户应用程序
- 订阅者应用程序连接到 TCP 端口并订阅所需的内容。 例如,S1 将订阅"P1">
- ,而 S2 将订阅"P1"和"P2">
- 例如
subscribe_sock.setsockopt(ZMQ_SUBSCRIBE, "P1", 2)
- 例如
subscribe_sock.setsockopt(ZMQ_SUBSCRIBE, "P2", 2)
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 如何使用 ZeroMQ 在特定端口上监听和解析 UDP 数据?
- 有没有办法通过 zeromq pub 子C++发送字符串以外的数据类型
- 如何使用两个发布者的同一端口来使用 ZeroMQ 向同一订阅者发送数据?
- 无法将数据从 Zeromq 客户端发送到 TCP 服务器
- 为什么我的C++ ZeroMQ 订阅者没有收到任何数据
- zeromq/zmqpp:转发带有消息的元数据
- 如何使用协议缓冲区和 ZeroMQ 在 c++ 和 java 之间交换二进制数据
- ZeroMQ是否有数据到达时的通知/回调事件/消息
- ZeroMQ消息损坏数据
- 使用zeroMQ或boost.asio的C++数据包嗅探器
- 使用 MsgPack 通过 ZeroMQ (zmqpp) 发送数据时会出现"msgpack::v1::insufficient_bytes"错误