2015-04-20 15 views
6

Ho letto su ZeroMQ più specificamente su NetMQ e su quasi tutti gli esempi Pub/Sub utilizzati per collegare il socket Publisher e quindi il socket Subscriber si connette all'altro.Zeromq quale socket deve associare al pattern PubSub

Quindi mi chiedo se è possibile fare il contrario, cioè collegare il socket dell'iscritto e quindi i publisher si collegano ad esso.

È possibile? (Non ho trovato nulla di chiaro sulla documentazione) Quali sono gli svantaggi usando questa strategia di connessione?

Qualsiasi aiuto sarà utile.

risposta

6

Sì, puoi invertirlo e non ci sono svantaggi nell'usare tale strategia di connessione ... purché sia ​​adatta al tuo scopo.

In ZMQ, il concetto di guida dietro "vincolante" e "collegamento" è che una parte è spesso considerata più affidabile (e in genere ci saranno meno nodi), e l'altra parte è considerata più transitoria (e potrebbero esserci più nodi numerosi). Il lato affidabile sarebbe considerato il tuo "server", e dovresti bind() da quel lato, il lato transitorio sarebbe considerato il tuo "cliente" (o client s), e dovresti connect() da quel lato.

In genere, pensiamo a un "server" stabile che pubblica informazioni costantemente, a molti abbonati "client" che possono andare e venire. Questo è rappresentato negli esempi che vedi: bind on pub, connect on sub.

Ma, si potrebbe facilmente avere un "server" stabile che si abbona a qualsiasi output da molti editori "client" che si connettono ad esso, accettando qualsiasi informazione che stanno inviando mentre sono disponibili. Collegati su sub, collegati al pub.

Non sei limitato a un solo server, è solo l'esempio più semplice, tuttavia, sei più limitato se stai eseguendo tutte le tue prese sullo stesso computer. Il binding sullo stesso indirizzo con più di un socket produce un conflitto, ma è possibile connettere tutti i socket allo stesso indirizzo desiderato.

In molti casi, entrambi i lati della comunicazione sono realmente pensati per essere affidabili e di lunga durata, nel qual caso è utile pensare al nodo che invia le informazioni come server e quello che lo riceve come client . Nel qual caso, siamo tornati a legare su pub, connettersi su sub.