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_address
和 from_address
),然后将其发回。
改变(交换)很重要。 ZMQ 是一种传输,它只是将程序的数据从 A 转移到 B。这就是它所做的全部。它无法以任何方式更改数据。
所以消息不可避免地必须从传输中出来,然后再放回传输中。
您可以尝试 zerocopy 替代方案。这避免了一些正在进行的复制。
我正在尝试制作一个简单的代理(即星形拓扑),允许任何 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_address
和 from_address
),然后将其发回。
改变(交换)很重要。 ZMQ 是一种传输,它只是将程序的数据从 A 转移到 B。这就是它所做的全部。它无法以任何方式更改数据。
所以消息不可避免地必须从传输中出来,然后再放回传输中。
您可以尝试 zerocopy 替代方案。这避免了一些正在进行的复制。