如何使用两个发布者的同一端口来使用 ZeroMQ 向同一订阅者发送数据?

How to use same port for two publishers for sending data to the same subscriber using ZeroMQ?

本文关键字:ZeroMQ 数据 何使用 两个 发布者      更新时间:2023-10-16

我正在C++制作一个应用程序,其中两个发布者,例如pub1pub2,应该将数据发送给3个订阅者,例如s1s2s3

模式如下:

Pub1将数据发送到s1s2

Pub2将数据发送到s2s3

现在,如果我为发布者使用不同的 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"发布
  • 它们都连接到应用程序内部的XSUBzmq::proxy通过//:inproc。代理也在发布者应用程序中运行
  • 代理的另一端(XPUB端)绑定到单个TCP端口。

订户应用程序

  • 订阅者应用程序连接到 TCP 端口并订阅所需的内容。 例如,S1 将订阅"P1">
    • ,而 S2 将订阅"P1"和"P2">
    • 例如subscribe_sock.setsockopt(ZMQ_SUBSCRIBE, "P1", 2)
    • 例如subscribe_sock.setsockopt(ZMQ_SUBSCRIBE, "P2", 2)