ZeroMQ Simple Broker

时间:2017-03-29 19:25:26

标签: c++ zeromq

我正在尝试创建一个简单的代理(即星型拓扑),允许任何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;
}

然而,这是有效的,我觉得我刚刚做了这个,当我只是交换前两帧的位置时,将传入的帧(尤其是数据)复制到字符串中是低效的。把它发回去。

我的问题是 - 有没有一种标准的方式来做我想在这里做的事情?

似乎每个谷歌查询都会将我发回给单片指南/圣经,而不是实施示例......

1 个答案:

答案 0 :(得分:1)

AFAIK没有别的办法。

从根本上说,您正在从套接字读取数据,更改它(交换to_address&amp; from_address)并将其发回。

改变(交换)很重要。 ZMQ是一种传输方式,它只是将您的程序数据从A转移到B.这就是它的全部功能。它没有能力以任何方式更改数据。

因此,不可避免的是,消息必须从传输中传出,并再次被重新放入其中。

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