ZeroMQ:多对多 PUB/SUB
ZeroMQ: many to many PUB/SUB
我是 ZeroMQ 的新手。我正在编写一个 cpp
项目:
有不同类型的代理。
每种代理一次可以有多个代理。
每个代理都会向我的服务器发送一些消息。
不同类型的代理使用不同的端口。
相同类型的代理使用相同的端口。
比如我们有两种代理:A
和B
.
对于类型A
,我们有两个代理:agentA1
和agentA2
;
对于类型B
,我们有三个代理:agentB1
, agentB2
和 agentB3
.
现在,我运行5个代理同时发送消息到服务器。
agentA1
和agentA2
通过[=发送消息48=]port 5552
、
agentB1
、agentB2
和agentB3
通过port 5553
[发送消息=71=].
我愿意做的是让每个agent成为publisher,让我的server成为subscriber。
订阅者会监听5552
和5553
,一旦有消息通过这两个端口,他就会做一些事情。
现在我知道有一个 ZeroMQ 模式:PUB/SUB
.
但是,这种模式只有一个发布者和很多订阅者。
对我来说,我认为我需要很多发布者和很多订阅者。每个端口对应一个订阅者,它接收来自多个代理的消息。
不知道如何实现这些需求
您所说的在 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 --------------
...现在,您并不严格需要为这两种通信类型使用单独的端口,您可以只使用多帧消息并指示 message/agent 在您的消息的第一帧键入内容,如果您的项目发展到需要该功能,它的附带好处是允许您只订阅您感兴趣的消息。
我是 ZeroMQ 的新手。我正在编写一个 cpp
项目:
有不同类型的代理。
每种代理一次可以有多个代理。
每个代理都会向我的服务器发送一些消息。
不同类型的代理使用不同的端口。
相同类型的代理使用相同的端口。
比如我们有两种代理:A
和B
.
对于类型A
,我们有两个代理:agentA1
和agentA2
;
对于类型B
,我们有三个代理:agentB1
, agentB2
和 agentB3
.
现在,我运行5个代理同时发送消息到服务器。agentA1
和agentA2
通过[=发送消息48=]port 5552
、agentB1
、agentB2
和agentB3
通过port 5553
[发送消息=71=].
我愿意做的是让每个agent成为publisher,让我的server成为subscriber。
订阅者会监听5552
和5553
,一旦有消息通过这两个端口,他就会做一些事情。
现在我知道有一个 ZeroMQ 模式:PUB/SUB
.
但是,这种模式只有一个发布者和很多订阅者。
对我来说,我认为我需要很多发布者和很多订阅者。每个端口对应一个订阅者,它接收来自多个代理的消息。
不知道如何实现这些需求
您所说的在 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 --------------
...现在,您并不严格需要为这两种通信类型使用单独的端口,您可以只使用多帧消息并指示 message/agent 在您的消息的第一帧键入内容,如果您的项目发展到需要该功能,它的附带好处是允许您只订阅您感兴趣的消息。