2014-05-10 5 views
10

Qualcuno può dire quali sono i tipi di zmq.sockets?Che cos'è zmq.ROUTER e zmq.DEALER in python zeromq?

In quale situazione si possono utilizzare queste prese?

La differenza principale è che ho bisogno zmq.DEALER e zmq.ROUTER in pitone zeroMQ?

Quale tipo di presa può utilizzare queste prese?

risposta

16

DEALER e ROUTER sono socket, che possono consentire un facile ridimensionamento delle coppie REQ/REP.

Nella comunicazione diretta, REQ e REP stanno parlando in modo bloccante.

ROUTER - accettare le richieste - da parte REQ

router è in grado di accettare le richieste, aggiunge una busta con le informazioni su quel REQUESTEE, e rende questa nuova informazione disponibile per la successiva elaborazione tramite l'interconnessione del codice). Quando la risposta ritorna (in una busta), può restituire la risposta al richiedente.

CONCESSIONARIO - parla con i lavoratori - sul lato REP

commerciante si preoccupa per i lavoratori. Si noti che per rendere utilizzabile l'intera soluzione, i lavoratori devono connettersi al rivenditore, non viceversa.

DEALER consente anche il collegamento non di blocco con REP.

Alcuni codici di collegamento passano richieste in una busta al CONCESSIONARIO, il rivenditore gestisce la distribuzione delle richieste ai lavoratori (senza la busta) e le risposte successive al codice di interconnessione (sempre in una busta).

comunicanti codice

codice comunicanti è quello di mischiare i messaggi tra router e prese rivenditore.

versione più semplice è qui: 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

Grazie questo è stato un grande spiegazione semplice. Stavo leggendo il grande libro 'Node: the Right Way', ma ero un po 'perplesso dai loro diagrammi e la spiegazione di DEALER/ROUTERs ma il tuo ha chiarito. – armyofda12mnkeys