首页 文章

ZeroMQ:多对多的PUB / SUB

提问于
浏览
1

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

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

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

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

我愿意做的是将每个代理作为 publisher 并使我的服务器成为 subscriber .
订阅者将监听 55525553 ,一旦有消息通过这两个端口,他就会做一些事情 .

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

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

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

1 回答

  • 3

    你看到了什么,每个出版商可以有很多订阅者 . 但是每个订阅者本身可以订阅许多发布者 . 此外,通常您在发布者上 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 --------------
    

    ...现在,您不需要为这两种通信类型使用单独的端口,您可以只使用多帧消息并使用消息的第一帧指示消息/代理类型,这具有附带好处如果您的项目需要该功能,则允许您仅订阅您感兴趣的消息 .

相关问题