2017-03-29 1 views
0

J'essaye de faire un courtier simple (c'est-à-dire la topologie en étoile) qui permette à n'importe quel noeud DEALER de parler à n'importe quel autre noeud DEALER qui s'est également connecté au courtier. Voici la configuration actuelle: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; 
} 

Cela fonctionne, cependant, je me sens comme je viens de faire et ce qu'il est inefficace de copier les trames entrantes (les données esp.) En chaînes quand je suis juste échange les positions des deux premières images et l'envoi immédiat.

Ma question est la suivante: existe-t-il une façon standard de faire ce que j'essaie de faire ici?

Il semble que chaque requête google seule me renvoie au lieu monolithique Guide/Bible des exemples de mise en œuvre ...

Répondre

1

AFAIK il n'y a pas d'autre moyen. Fondamentalement, vous êtes en train de lire des données à partir d'une socket, en les changeant (échange to_address & from_address autour), et de l'envoyer à nouveau.

Le changement (le swap) est important. ZMQ est un transport, il déplace simplement les données de votre programme de A à B. C'est tout ce qu'il fait. Il n'a pas la capacité de changer les données de quelque façon que ce soit.

Il est donc inévitable que les messages sortent du transport et y soient à nouveau remis.

Vous pourriez essayer les alternatives à zerocopy. Cela évite une partie de la copie qui se passe.

+1

Merci, je voulais juste en faire une preuve de concept plus que tout - je sais que ZeroMQ est une question de messagerie distribuée et non de messagerie sponsorisée. – RPGillespie

+0

@RPGillespie, pas de soucis :) – bazza