ZeroMQ:多对多 PUB/SUB

Yve*_*ves 1 c++ zeromq

我是ZeroMQ 的新手。我正在编写一个cpp项目:

有不同类型的代理。
每种类型的代理一次可以有多个代理。
每个代理都会向我的服务器发送一些消息。
不同类型的代理使用不同的端口。
相同类型的代理使用相同的端口。

例如,我们有两种类型的代理:AB
对于 type A,我们有两个代理:agentA1agentA2;
对于 type B,我们有三个代理:agentB1,agentB2agentB3

现在,我同时运行五个代理,因此它们将向服务器发送消息。
agentA1agentA2通过port 5552、发送消息
agentB1agentB2agentB3通过 发送消息port 5553

我愿意做的是让每个代理都成为发布者,让我的服务器成为订阅者
认购人将听取55525553,因为一些消息来通过两个端口,他会做一些事情尽快。

现在我知道有一个 ZeroMQ 模式:PUB/SUB.

然而,这种模式只有一个发布者和许多订阅者。
对我来说,我认为我需要很多发布者和订阅者。每个端口对应一个订阅者,它接收来自多个代理的消息。

我不知道如何实现这些需求。

Jas*_*son 5

你所说的将在 ZMQ 上工作得很好。如您所见,每个发布者可以有多个订阅者。但是每个订阅者本身可以订阅多个发布者。此外,通常您bind()在发布者和connect()订阅者上,但您也可以反转。唯一的常规限制是每个套接字仅绑定在一个端口上。因此,您的设置将类似于以下内容:

  (CLIENTS - connect)                   (SERVER - bind)

AgentA1 (PUB) :5552 --------------
                                  |
AgentA2 (PUB) :5552 -------------- -  :5552 (SUB) Server Socket A


AgentB1 (PUB) :5553 -------------- -  :5553 (SUB) Server Socket B
                                  |
AgentB2 (PUB) :5553 --------------
                                  |
AgentB3 (PUB) :5553 --------------
Run Code Online (Sandbox Code Playgroud)

...现在,你不严格需要使用单独的端口,这两个通信类型,你可以只使用一个多帧消息,表明您的消息的第一帧,它具有附带的好处消息/代理类型允许您仅订阅您感兴趣的消息,如果您的项目增长到需要该功能。