ZeroMQ 简单代理

ZeroMQ Simple Broker

我正在尝试制作一个简单的代理(即星形拓扑),允许任何 DEALER 节点与任何其他也连接到代理的 DEALER 节点通信。这是当前设置:

// Simple broker
#include <string>
#include <zmq.hpp>
#include <zhelpers.hpp>

using namespace std;

int main()
{
    zmq::context_t context(1);
    zmq::socket_t router(context, ZMQ_ROUTER);
    router.bind("ipc://router.ipc");

    while (true)
    {
        string from_address = s_recv(router);
        string to_address   = s_recv(router);
        string message      = s_recv(router);

        s_sendmore(router, to_address);
        s_sendmore(router, from_address);
        s_send(router, message);
    }

    return 0;
}

这行得通,但是,我觉得我只是编造了这个,当我只是交换前两帧的位置时,将传入的帧(尤其是数据)复制到字符串中效率很低,并且立即发送回去。

我的问题是 - 是否有一种标准方法可以执行我在这里尝试执行的操作?

似乎每一个 google 查询都让我回到整体 Guide/Bible 而不是实现示例...

据我所知,没有其他办法。

从根本上说,您是从套接字读取数据、更改数据(交换 to_addressfrom_address),然后将其发回。

改变(交换)很重要。 ZMQ 是一种传输,它只是将程序的数据从 A 转移到 B。这就是它所做的全部。它无法以任何方式更改数据。

所以消息不可避免地必须从传输中出来,然后再放回传输中。

您可以尝试 zerocopy 替代方案。这避免了一些正在进行的复制。