Что такое zmq.ROUTER и zmq.DEALER в python zeromq?

Может ли кто-нибудь сказать, какие типы zmq.sockets?

В какой ситуации можно использовать эти сокеты?

Основное различие, которое мне нужно, - zmq.DEALER и zmq.ROUTER в python zeroMQ?

Какой тип сокета может использовать эти сокеты?

Ответ 1

DEALER и ROUTER - это сокеты, которые позволяют легко масштабировать пары REQ/REP.

В прямой связи REQ и REP говорят о блокировке.

ROUTER - принимать запросы - со стороны 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)