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
Odpowiedz
Istnieje kilka podstawowych zasad, dla których należy powiązać i które połączyć. Generalnie zeromq nie obchodzi *, tylko od Ciebie zależy to, co jest wygodniejsze.
Dla danej pary gniazd, które będą mówić do siebie, oto kilka pytań zadać, aby dowiedzieć się, co powinno wiązać i które powinny łączyć:
- Czy jeden z procesów żyją dłużej niż drugi (tj. czy jeden start, coś zrobić, zatrzymać, podczas gdy drugi siada i biegnie długo)? Jeśli tak, to dłuższa osoba powinna się związać.
- Czy masz wiele instancji jednej strony lub drugiej? Jeśli tak, to ten, który nie jest wielokrotny (lub ten, który ma mniej instancji) powinien się połączyć, ponieważ jest to mniej adresów URL do śledzenia.
Dotyczy to głównie ułatwienia zarządzania adresami URL i połączeniami. W przykładzie ujścia/zlewu jest dokładnie jeden wentylator i jeden zlew, ale może być dowolna liczba pracowników (zero do wielu). Jeśli zlewozmywak i odpowietrznik obie się zwiążą, to nie muszą wiedzieć o pracownikach, kiedy przychodzą i odchodzą. Istnieją tylko dwa URL-e, które można śledzić, natomiast jeśli pracownicy są związani, trzeba będzie śledzić adres URL każdego nowego pracownika i poinformować o zlewu i/lub odpowiedzieć na nowy adres URL za każdym razem, gdy pojawi się nowy pracownik.
* w rzeczywistości może mieć znaczenie w niektórych przypadkach skrajnych, ale nie na ogół.
- 1. Kiedy wiesz, kiedy użyć TreeSet lub LinkedList?
- 2. kiedy użyć tkaniny lub ansibla?
- 3. Kiedy użyć #define lub stałej char/int?
- 4. django - kiedy należy użyć media_root lub static_root?
- 5. Jquery - Kiedy użyć "this" i kiedy użyć "$ (this)"?
- 6. Kiedy należy użyć mmap
- 7. form_for i form_tag, kiedy użyć?
- 8. Sonda ZMQ nie działa
- 9. Jak działa polder Zmq?
- 10. Kiedy należy użyć sqlalchemy back_populates?
- 11. Kiedy nie można użyć kompilatora RVO lub NRVO?
- 12. Django kiedy użyć metody przerywaniem
- 13. Kiedy użyć narzędzia do budowania?
- 14. Kiedy użyć sprężyny: tag URL?
- 15. Kiedy użyć requestScope w jstl?
- 16. kiedy użyć alternatywnej dystrybucji Pythona?
- 17. Kiedy mogę użyć gwiazdki Any?
- 18. OnMapLoadedCallback i OnMapReadyCallback, kiedy użyć?
- 19. W Jira Agile, kiedy powinienem użyć "Historii" i kiedy powinienem użyć "Ulepszenia"
- 20. Których użyć? decimal.Add() lub "+"
- 21. Kiedy używać @ w widoku szyn i kiedy użyć symbolu?
- 22. ZMQ :: LibZMQ3 i strawberry perl
- 23. Hash params vs parametry url, kiedy użyć?
- 24. Kiedy należy użyć const i do tego?
- 25. Kiedy należy użyć make_heap vs. Priority Queue?
- 26. Lepsze wyjaśnienie kiedy użyć Import/Zależy
- 27. AppEngine - Kiedy użyć relacji z rodzicem?
- 28. Kiedy i gdzie należy użyć WCF
- 29. Java URLConnection - Kiedy należy użyć metody connect()?
- 30. Kiedy użyć tego w javascript OO?
Nie jesteś już w stanie odpowiedzieć na swoje pytanie? Używam zmq_bind do słuchania na gnieździe i zmq_connect do podłączenia do tego gniazda. – Filip
Na przykład, dlaczego musimy zaprojektować zlew jako serwer? dlaczego nie klient? Dlaczego musimy projektować zleceniodawcę-nadawcę jako klienta? dlaczego nie serwer? – q0987
nie musisz - to tylko przykład. Taskworker przesyła wyniki do zlewu. To może działać jak żądanie - odpowiedź też, tak myślę. – Filip