Может ли кто-нибудь сказать, какие типы zmq.sockets?
В какой ситуации можно использовать эти сокеты?
Основное различие, которое мне нужно, - zmq.DEALER
и zmq.ROUTER
в python zeroMQ?
Какой тип сокета может использовать эти сокеты?
Может ли кто-нибудь сказать, какие типы zmq.sockets?
В какой ситуации можно использовать эти сокеты?
Основное различие, которое мне нужно, - zmq.DEALER
и zmq.ROUTER
в python zeroMQ?
Какой тип сокета может использовать эти сокеты?
DEALER и ROUTER - это сокеты, которые позволяют легко масштабировать пары REQ/REP.
В прямой связи REQ и REP говорят о блокировке.
Маршрутизатор может принимать запросы, добавляет конверт с информацией об этом запрашивающем и делает это новое сообщение доступным для дальнейшей обработки путем соединения кода). Когда ответ возвращается (в конверте), он может передать ответ обратно запрашивающему лицу.
Дилер заботится о рабочих. Обратите внимание, что для того, чтобы все решение можно было использовать, работники должны подключиться к дилеру, а не наоборот.
DEALER также позволяет не блокировать соединение с REP.
Некоторые соединительные коды передают запрос в конверт DEALER, дилер управляет распределением запросов к работникам (без конверта), а последующие ответы обратно на соединительный код (снова в конверте).
Соединительный код - это перетасовывать сообщения между сокетами ROUTER и DEALER.
Простейшая версия здесь: http://zguide.zeromq.org/py:rrbroker
# Simple request-reply broker
#
# Author: Lev Givon <lev(at)columbia(dot)edu>
import zmq
# Prepare our context and sockets
context = zmq.Context()
frontend = context.socket(zmq.ROUTER)
backend = context.socket(zmq.DEALER)
frontend.bind("tcp://*:5559")
backend.bind("tcp://*:5560")
# Initialize poll set
poller = zmq.Poller()
poller.register(frontend, zmq.POLLIN)
poller.register(backend, zmq.POLLIN)
# Switch messages between sockets
while True:
socks = dict(poller.poll())
if socks.get(frontend) == zmq.POLLIN:
message = frontend.recv_multipart()
backend.send_multipart(message)
if socks.get(backend) == zmq.POLLIN:
message = backend.recv_multipart()
frontend.send_multipart(message)