Что zmq.Маршрутизатор и zmq.Дилер в python zeromq?

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

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

главное отличие, которое мне нужно, это zmq.DEALER и zmq.ROUTER в python zeroMQ?

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

1 ответов


торговец и маршрутизатор гнезда, которые могут позволить легкому шкалированию пар REQ / REP.

при прямом общении REQ и REP разговаривают блокирующим образом.

маршрутизатор-принимает запросы-со стороны REQ

маршрутизатор способен принимать запросы, добавляет конверт с информацией об этом запрашиваемом и делает это новое сообщение доступным для дальнейшей обработки путем соединения кода). Когда ответ приходит назад (в Envelope), он может пройти ответ для субъекта запроса.

дилер-переговоры с рабочими-на стороне REP

дилер заботится о работниках. Обратите внимание, что для использования всего решения работники должны подключаться к дилеру, а не наоборот.

дилер также позволяет неблокирующее соединение с REP.

некоторый соединяясь код передает запрос в конверте к торговцу. Дилер управляет распределением таких запросов среди работников (без конверта) и позже отвечает на код соединения (снова в конверте).

смежный код

код соединения перетасовать сообщения между маршрутизатором и гнездами торговца.

самая простая версия здесь: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)