我是ZeroMQ的新手。我正在编程一个cpp项目:
有不同类型的代理。
每种类型的代理可以同时具有多个代理。
每个代理都会向我的服务器发送一些消息。
不同类型的代理使用不同的端口。相同类型的代理使用相同的端口。
例如,我们有两种类型的代理: A B 。对于A类型,我们有两种代理:agentA1agentA2;对于B类型,我们有三种代理:agentB1agentB2和ojit。
现在,我同时运行五个代理,因此它们将向服务器发送消息。 agentB3agentA1通过发送消息agentA2 port 5552agentB1agentB2通过发送消息agentB3
我愿意做的是使每个代理成为发布者,并使我的服务器成为订户。订户将监听port 55535552,只要有消息通过这两个端口,他便会做一些事情。
现在我知道有一个ZeroMQ模式: 5553
但是,这种模式只有一个发布者和许多订阅者。对我来说,我认为我需要许多发布者和许多订阅者。每个端口对应一个用户,并且从许多代理接收消息。
我不知道如何实现这些需求。

最佳答案

您正在谈论的内容将在ZMQ上正常运行。如您所见,每个发布者可以有许多订阅者。但是每个订阅者本身可以订阅许多发布者。此外,通常您在发布者上使用bind(),在订阅者上使用connect(),但是您也可以将其撤消。唯一的常规限制是每个套接字仅在单个端口上绑定(bind)。因此,您的设置将如下所示:

  (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 --------------

...现在,您不必严格要求为这两种通信类型使用单独的端口,您可以仅使用多帧消息并在消息的第一帧中指示消息/代理类型,这具有副作用如果您的项目逐渐需要该功能,则仅允许您订阅感兴趣的消息。

关于c++ - ZeroMQ:多对多PUB/SUB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31938882/

10-12 20:35