Refer to http://hintjens.wdfiles.com/local--files/main:files/cc1pe.pdf
Page 22 Chapter Divide and Conquer
Ventilator[PUSH]
___________________|____________________
| | |
[PULL]Worker[PUSH] [PULL]Worker[PUSH] [PULL]Worker[PUSH]
|__________________|___________________|
|
[PULL]Sink
// taskvent.c
// Socket to send messages on
void *context = zmq_ctx_new();
void *sender = zmq_socket (context, ZMQ_PUSH);
zmq_bind (sender, "tcp://*:5557");
// Socket to send start of batch message on
void *sink = zmq_socket (context, ZMQ_PUSH);
zmq_connect (sink, "tcp://localhost:5558");
// taskwork.c
// Socket to receive messages on
void *context = zmq_ctx_new();
void *receiver = zmq_socket (context, ZMQ_PULL);
zmq_connect (receiver, "tcp://localhost:5557");
// Socket to send messages to
void *sender = zmq_socket (context, ZMQ_PUSH);
zmq_connect (sender, "tcp://localhost:5558");
// tasksink.c
// Prepare our context and socket
void *context = zmq_ctx_new();
void *receiver = zmq_socket (context, ZMQ_PULL);
zmq_bind (receiver, "tcp://*:5558");
I feel confused when to use zmq_bind or zmq_connect.
It says that most of time "Server" uses zmq_bind and "Client" uses zmq_connect.
Question> When I should use zmq_bind and when I should I use zmq_connect?
http://api.zeromq.org/
zmq_bind - accept incoming connections on a socket
zmq_connect - create outgoing connection from socket
risposta
Esistono alcuni principi di base per il collegamento e il collegamento. In generale, zeromq non si preoccupa *, dipende solo da te ciò che è più conveniente.
Per una data coppia di socket che parlare gli uni agli altri, ecco un paio di domande da porre per capire che deve legare, e che dovrebbe collegare:
- Does uno dei processi di vivere più a lungo l'altro (cioè si avvia, si fa qualcosa, si ferma, mentre l'altro si siede e corre a lungo)? Se è così, il più longevo dovrebbe legarsi.
- Avete più istanze di un lato o dell'altro? In tal caso, quello che non è multiplo (o quello con meno istanze) dovrebbe essere associato, poiché questo è un numero inferiore di URL da tenere sotto controllo.
Questi sono principalmente per rendere più facile la gestione di URL e connessioni. Nell'esempio di ventilazione/affondamento, c'è esattamente un ventilatore e un lavandino, ma può esserci un numero qualsiasi di lavoratori (zero-a-molti). Se il lavandino e lo sfiato si legano entrambi, allora non hanno bisogno di sapere degli operai quando vanno e vengono. Ci sono solo due URL da tenere sotto controllo, mentre se i lavoratori sono vincolati, dovresti tenere traccia di un URL per ogni nuovo lavoratore, e dire al sink e/o vent del nuovo URL ogni volta che arriva un nuovo lavoratore.
* in realtà può essere importante in alcuni casi limite, ma non in generale.
- 1. ZMQ Pub-Sub Programma mancata quando si perde la connettività di rete
- 2. Quando utilizzare (o non utilizzare) un delegato
- 3. Quando utilizzare NaN o +/- Infinity?
- 4. Quando utilizzare InvalidOperationException o NotSupportedException?
- 5. ZMQ :: LibZMQ3 e fragola perl
- 6. Rilevamento di lettori lenti con zmq (zeromq)
- 7. Quando utilizzare CultureInfo.GetCultureInfo (String) o CultureInfo.CreateSpecificCulture (String)
- 8. Quando utilizzare Mapper o Record in Lift?
- 9. Quando utilizzare #define o char costante/int?
- 10. Android quando utilizzare ContentResolver applyBatch o BulkInsert
- 11. quando utilizzare UL o OL in html?
- 12. Quando utilizzare lato client o lato server?
- 13. Quando utilizzare os.name, sys.platform o platform.system?
- 14. Quando utilizzare TextFrame o TextFrame2 in VBA
- 15. Quando utilizzare gli attori locali o remoti?
- 16. Quando utilizzare una query o un codice
- 17. ZMQ Problemi di compilazione per esempi C++
- 18. Quando utilizzare le interfacce o classi astratte? Quando usare entrambi?
- 19. Quando sai quando utilizzare un TreeSet o LinkedList?
- 20. Quando utilizzare JMS e quando utilizzare REST?
- 21. Quali sono le impostazioni appropriate per ZMQ quando si inviano messaggi 500K a 64 byte?
- 22. Ohm e redis: quando utilizzare set, elenco o collezione?
- 23. Quando utilizzare un albero di sintassi astratto o concreto?
- 24. Quando utilizzare HashMap su LinkedList o ArrayList e viceversa
- 25. Quando utilizzare Cygwin o MinGW per compilare il codice C?
- 26. QtScript vs QJSEngine quando utilizzare uno o l'altro?
- 27. Quando utilizzare PNG o JPG nello sviluppo di iPhone?
- 28. Quando utilizzare on-click o on-tap w/Polymer?
- 29. Quando utilizzare httpclose o http-server-close in haproxy
- 30. Quando un compilatore non può utilizzare RVO o NRVO?
non hai ancora risposto alla tua domanda? Io uso zmq_bind per l'ascolto su un socket e zmq_connect per connettermi a quel socket. – Filip
Ad esempio, perché dobbiamo progettare il sink come server? perché non un cliente? Perché dobbiamo progettare taskwork-sender come client? perché non un server? – q0987
non hai bisogno di - questo è solo l'esempio. Il taskworker spinge i risultati al sink. Potrebbe funzionare come una richiesta - rispondi anche io, immagino. – Filip