【问题标题】:ZeroMQ Simple BrokerZeroMQ 简单代理
【发布时间】:2017-03-30 04:41:10
【问题描述】:

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

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

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

似乎每一个谷歌查询都会让我回到整体指南/圣经而不是实现示例......

【问题讨论】:

    标签: c++ zeromq


    【解决方案1】:

    AFAIK 没有其他办法。

    从根本上说,您正在从套接字读取数据,对其进行更改(交换to_addressfrom_address),然后将其发送回。

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

    因此,消息不可避免地必须从传输中出来,然后再次放回其中。

    您可以尝试使用 zerocopy 替代方案。这避免了一些正在发生的复制。

    【讨论】:

    • 谢谢,我只是想把它作为概念证明,而不是任何东西 - 我知道 ZeroMQ 是关于分布式消息传递而不是代理消息传递。
    • @RPGillespie,不用担心 :)
    猜你喜欢
    • 2017-07-23
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    相关资源
    最近更新 更多