2014-05-10 19 views

Odpowiedz

16

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) 
+2

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