DEALER i ROUTER to gniazda, które umożliwiają łatwe skalowanie par REQ/REP.
W komunikacji bezpośredniej, REQ i REP rozmawiają w sposób blokujący.
Router - akceptować żądań - od strony REQ
Router jest w stanie przyjmować prośby, dodaje kopertę z informacją o tym REQUESTEE, i sprawia, że ten nowy komunikat dostępne do dalszej obróbki przez kod przechodni). Gdy odpowiedź powróci (w kopercie), może przekazać odpowiedź z powrotem do requestee.
DEALER - mówi do pracowników - na stronie REP
Dealer dba o pracowników. Pamiętaj, że aby całe rozwiązanie było użyteczne, pracownicy muszą połączyć się z dealerem, a nie odwrotnie.
DEALER pozwala również na niezablokowane połączenie z REP.
Niektóre kody łączące przekazują żądanie w kopercie do DEALERA, dystrybutor zarządza przesyłaniem zgłoszeń do pracowników (bez koperty), a później odpowiedzi z powrotem do kodu połączenia (ponownie w kopercie).
łączone kod
łączone kod jest shuffle wiadomości między ROUTER i sprzedawcy gniazd.
wersja Najprostszy jest tutaj: 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)
Dzięki był to super proste wyjaśnienie. Czytałem świetną książkę "Węzeł: właściwa droga", ale byłem nieco zakłopotany ich schematami i objaśnieniami DEALERA/ROUTERA, ale wasze to wyjaśniło. – armyofda12mnkeys