我正在尝试创建一个简单的代理(即星型拓扑),允许任何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;
}
然而,这是有效的,我觉得我刚刚做了这个,当我只是交换前两帧的位置时,将传入的帧(尤其是数据)复制到字符串中是低效的。把它发回去。
我的问题是 - 有没有一种标准的方式来做我想在这里做的事情?
似乎每个谷歌查询都会将我发回给单片指南/圣经,而不是实施示例......
答案 0 :(得分:1)
AFAIK没有别的办法。
从根本上说,您正在从套接字读取数据,更改它(交换to_address
&amp; from_address
)并将其发回。
改变(交换)很重要。 ZMQ是一种传输方式,它只是将您的程序数据从A转移到B.这就是它的全部功能。它没有能力以任何方式更改数据。
因此,不可避免的是,消息必须从传输中传出,并再次被重新放入其中。
您可以尝试使用zerocopy替代品。这避免了一些正在进行的复制。