如何使用 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"
- 它们都在您的应用程序内部通过
//:inproc
连接到 zmq::proxy
的 XSUB
端。代理也在您的发布者应用程序中 运行
- 代理的另一端(
XPUB
端)绑定到单个 TCP 端口。
订户申请
- 您的订阅者应用程序连接到 TCP 端口并订阅他们需要的内容。
- 例如 S1 将订阅 "P1" 而 S2 将同时订阅 "P1" 和 "P2"
- 例如
subscribe_sock.setsockopt(ZMQ_SUBSCRIBE, "P1", 2)
- 例如
subscribe_sock.setsockopt(ZMQ_SUBSCRIBE, "P2", 2)
我正在用 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" - 它们都在您的应用程序内部通过
//:inproc
连接到zmq::proxy
的XSUB
端。代理也在您的发布者应用程序中 运行 - 代理的另一端(
XPUB
端)绑定到单个 TCP 端口。
订户申请
- 您的订阅者应用程序连接到 TCP 端口并订阅他们需要的内容。
- 例如 S1 将订阅 "P1" 而 S2 将同时订阅 "P1" 和 "P2"
- 例如
subscribe_sock.setsockopt(ZMQ_SUBSCRIBE, "P1", 2)
- 例如
subscribe_sock.setsockopt(ZMQ_SUBSCRIBE, "P2", 2)