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
ответ
Существует несколько основных принципов, которые необходимо связывать и которые необходимо подключить. В общем, zeromq не волнует *, это просто до вас, что более удобно.
Для данной пары сокетов, которые будут говорить друг с другом, вот несколько вопросов, чтобы спросить, чтобы выяснить, который должен связать и которые должны соединить:
- ли один из процессов, живут дольше другой (т. е. запускается ли что-то, останавливается, а другой сидит и работает долгое время)? Если это так, то долгоживущий должен связываться.
- У вас есть несколько экземпляров одной или другой стороны? Если это так, то, который не является множественным (или тем, который имеет меньше экземпляров), должен связываться, потому что это меньше URL-адресов для отслеживания.
В основном это упрощает управление URL-адресами и соединениями. В примере с вентилятором/приемником имеется ровно один вентилятор и один приемник, но может быть любое количество рабочих (ноль-ко-многим). Если раковина и вентиляционное отверстие соединяются, то им не нужно знать о рабочих, когда они приходят и уходят. Есть только два URL-адреса, которые следует отслеживать, тогда как если бы сотрудники привязались, вам приходилось отслеживать URL-адрес для каждого нового работника и сообщать приемнику и/или выпускать новый URL-адрес каждый раз, когда новый рабочий прибывал.
* Это действительно может иметь значение в некоторых случаях с краями, но не в целом.
- 1. Использование zmq_conect порта befor zmq_bind, return suncces
- 2. zmq_connect() сокет в ожидании zmq_send() или zmq_recv()
- 3. Причина для кода ошибки zmq 156384763
- 4. понимание ZMQ - Сопряжение Sockets для многопоточной
- 5. Как использовать подклассы сокетов ZMQ
- 6. zmq терпит неудачу при выполнении запроса ('zmq')
- 7. Компиляция кода C с использованием zmq API
- 8. ZMQ: socket_send/recv blocking
- 9. Получайте события freeswitch с помощью ZMQ
- 10. ZMQ hanging - ZMQSocket :: send
- 11. Кодировка для ZMQ
- 12. Автоматическое обнаружение ZMQ брокеров
- 13. ZMQ и Twisted
- 14. Когда использовать!() Или! = Когда, если не нулевой
- 15. не удается найти пакет zmq, «пакет требует zmq»
- 16. Когда использовать (или не использовать) делегат
- 17. Синхронизация, когда использовать или не использовать?
- 18. Когда использовать tensorflow или api.ai
- 19. Когда использовать NaN или +/- Infinity?
- 20. , когда использовать ajax.load() или jquery.ajax()
- 21. Когда использовать (: метод) или (&: метод)
- 22. Когда использовать STRef или IORef?
- 23. Когда использовать HANDLE_EINTR или HANDLE_EAGAIN?
- 24. объекты или затворы - когда использовать?
- 25. Когда использовать: до или: после
- 26. Когда использовать Servlet или @Controller
- 27. когда использовать ткань или правку?
- 28. Когда использовать действия или фрагменты
- 29. Когда использовать?,!, None или Lazy?
- 30. Когда использовать Server.Transfer или Response.Rewrite?
Вы уже не ответили на свой вопрос? Я использую zmq_bind для прослушивания сокета и zmq_connect для подключения к этому сокету. – Filip
Например, почему мы должны проектировать раковину в качестве сервера? почему не клиент? Почему нам нужно создать диспетчер задач как клиента? почему не сервер? – q0987
вам НЕ НУЖНО - вот только пример. Работодатель подталкивает результаты к раковине. Я думаю, он мог бы работать как запрос - ответ. – Filip