2017-03-29 42 views
0

我正在嘗試做一個簡單的代理(即星型拓撲),它允許任何DEALER節點與其他連接到代理的其他DEALER節點進行通信。這是當前設置:ZeroMQ Simple Broker

// 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; 
} 

這工作,不過,我覺得我只是做這件事,它是低效的輸入幀(ESP中的數據。)複製到字符串時,我只是換前兩幀的位置並將其發送回去。

我的問題是 - 是否有一個標準的做法,我正在嘗試做什麼?

這似乎是每一個谷歌查詢送我回單片指南/聖經,而不是執行的例子...

回答

1

AFAIK有沒有其他辦法。

基本上,您正在從套接字讀取數據,更改它(交換to_address & from_address),並將其發回。

更改(交換)很重要。 ZMQ是一種傳輸方式,它只是簡單地將程序的數據從A轉換到B.這就是它的全部功能。它無法以任何方式更改數據。

因此,消息必須從運輸中出來,並且再次放回到消息中是不可避免的。

你可以嘗試使用zerocopy選項。這避免了一些正在進行的複製。

+1

謝謝,我只是想把它作爲一個概念的證明,而不是任何東西 - 我知道ZeroMQ是關於分佈式消息而不是代理消息。 – RPGillespie

+0

@RPGillespie,不用擔心:) – bazza