2014-05-10 4 views
10

Kann jemand sagen, was sind die Arten von zmq.sockets?Was ist zmq.ROUTER und zmq.DEALER in Python zeromq?

In welcher Situation kann man diese Buchsen benutzen?

Der wesentliche Unterschied ich brauche, ist zmq.DEALER und zmq.ROUTER in Python zeroMQ?

Welcher Sockeltyp kann diese Sockets verwenden?

Antwort

16

DEALER und ROUTER sind Buchsen, die eine einfache Skalierung von REQ/REP-Paaren ermöglichen.

In direkter Kommunikation sprechen REQ und REP blockierend.

router - Anfragen annehmen - von REQ Seite

Router ist in der Lage der Annahme von Anfragen, fügt einen umhüllen mit Informationen über diesen requestee, und macht diese neue Nachricht durch Verbindungscode für die weitere Verarbeitung zur Verfügung). Wenn die Antwort zurückkommt (in einem Umschlag), kann sie die Antwort an den Anfragenden zurückgeben.

DEALER - Gespräche für die Arbeitnehmer - auf REP Seite

Händler über Arbeiter kümmert. Beachten Sie, dass die Arbeiter sich mit dem Händler verbinden müssen, um die gesamte Lösung nutzbar zu machen, und nicht umgekehrt.

Der DEALER ermöglicht auch eine nicht blockierende Verbindung mit REP.

Einige Verbindungscode übergibt Anfrage in einem Umschlag an den Händler, Händler verwaltet Verteilung Anforderungen an Arbeiter (ohne den Umschlag) und spätere Antworten zurück auf den Verbindungscode (wieder in einem Umschlag).

Interconnecting Code

Verbindungscode ist Nachrichten zwischen Router- und DEALER-Buchsen zu mischen.

einfachste Version ist hier: 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

Dank dieses eine große einfache Erklärung war. Ich habe das großartige Buch "Node: the Right Way" gelesen, war aber ein bisschen ratlos wegen ihrer Diagramme und Erklärungen von HÄNDLERN/ROUTERN, aber Ihre haben es aufgeklärt. – armyofda12mnkeys

Verwandte Themen