ZeroMQ:多对多的PUB / SUB

时间:2015-08-11 10:07:55

标签: c++ zeromq

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

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

例如,我们有两种类型的代理: A B
对于类型A ,我们有两个代理:agentA1agentA2;
对于类型B,我们有三个代理:agentB1agentB2和{{1 }}。

现在,我同时运行五个代理,因此他们会向服务器发送消息。
agentB3agentA1通过 agentA2 <发送消息/ strong>,port 5552agentB1agentB2通过 agentB3 发送消息。

我愿意做的是将每个代理作为发布商并将我的服务器设为订阅者
订阅者将会监听{ {1}}和port 5553,只要有一条消息通过这两个端口,他就会做一些事情。

现在我知道有一个ZeroMQ模式: 5552

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

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

1 个答案:

答案 0 :(得分:3)

你所谈论的内容在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 --------------

...现在,您没有严格需要为这两种通信类型使用单独的端口,您可以使用多帧消息并使用第一个指示消息/代理类型如果您的项目需要该功能,那么您的消息框架可以让您只订阅您感兴趣的消息。