2011-12-13 14 views
13

Im un novizio a ZERMQ. ZeroMQ ha trasporti TCP, INPROC e IPC. Sto cercando degli esempi usando python e inproc in Winx64 e python 2.7, che potrebbero essere usati anche per Linux.Come utilizzare i trasporti inproc e ipc di Zeromq?

Inoltre, sono stato alla ricerca di metodi di trasporto UDP e non posso trovare esempi.

L'unico esempio che ho trovato è

import zmq 
import zhelpers 

context = zmq.Context() 

sink = context.socket(zmq.ROUTER) 
sink.bind("inproc://example") 

# First allow 0MQ to set the identity 
anonymous = context.socket(zmq.XREQ) 
anonymous.connect("inproc://example") 
anonymous.send("XREP uses a generated UUID") 
zhelpers.dump(sink) 

# Then set the identity ourself 
identified = context.socket(zmq.XREQ) 
identified.setsockopt(zmq.IDENTITY, "Hello") 
identified.connect("inproc://example") 
identified.send("XREP socket uses REQ's socket identity") 
zhelpers.dump(sink) 

Il caso d'uso che sto pensando è: UDP come distribuzione delle informazioni. Testare Push/Pull usando TCP è più veloce o sarebbe inproc essere più veloce.

Ecco test di esempio> ..............

Server:

import zmq 
import time 

context = zmq.Context() 
socket = context.socket(zmq.REP) 
socket.bind("inproc://example2") 

while True: 
    # Wait for next request from client 
    message = socket.recv() 
    print "Received request: ", message 

    # Do some 'work' 
    time.sleep (1)  # Do some 'work' 

    # Send reply back to client 
    socket.send("World") 

Cliente:

import zmq 

context = zmq.Context() 

# Socket to talk to server 
print "Connecting to hello world server..." 
socket = context.socket(zmq.REQ) 
socket.connect ("inproc://example2") 

# Do 10 requests, waiting each time for a response 
for request in range (1,10): 
    print "Sending request ", request,"..." 
    socket.send ("Hello") 

    # Get the reply. 
    message = socket.recv() 
    print "Received reply ", request, "[", message, "]" 

errore messaggio:

socket.connect ("inproc://example2") 
File "socket.pyx", line 547, in zmq.core.socket.Socket.connect (zmq\core\socket.c:5347) 
zmq.core.error.ZMQError: Connection refused 

risposta

9

In base alle mie conoscenze, UDP non è supportato di 0MQ. Inoltre, IPC è supportato solo su sistemi operativi che hanno un'implementazione conforme a POSIX di named pipe; quindi, su Windows, puoi davvero usare solo 'inproc', TCP o PGM. Tuttavia, al di là di tutto questo, una delle principali funzionalità di 0MQ è che il tuo protocollo è solo una parte dell'indirizzo. Puoi fare qualsiasi esempio, cambiare l'indirizzo del socket, e tutto dovrebbe funzionare ancora bene (soggetto, ovviamente, alle restrizioni summenzionate). Inoltre, lo ZGuide ha molti esempi (un buon numero dei quali sono disponibili in Python).

+0

Si prega di vedere le modifiche .... aggiunto esempio ... di errore msg. – Merlin

+0

@Merlin: sono in un processo separato? perché 'inproc' è adatto solo come sostituto per gli scenari di threading. – pblasucci

+0

cercando ad esempio di test .... in python, puoi puntare a qualsiasi – Merlin

8

Se (and only if) si utilizza lo ZMQ_PUB o prese ZMQ_SUB - che non si fa negli esempi hai dato, in cui si usa ROUTER, XREQ, ecc - è possibile utilizzare UDP, o più precisamente, UDP multicast via

"epgm: // host: porta"

EPGM sta per Encapsulated PGM, cioè PGM incapsulato in UDP, che è più compatibile con l'infrastruttura di rete esistente di PGM crudo.

Vedi anche http://api.zeromq.org/2-1:zmq-pgm

Non so di alcun supporto UDP per gli scenari unicast però.

0

Ho avuto lo stesso problema quando i miei pyzmq di e la versione di zmq è vecchia versione, aggiorno la versione a 15.2.0, poi risolto il problema, il prefisso indirizzo IPC che ho usato è "InProc: //"

os: win7-x64 python: 2.7.6

3

ZeroMQ ha thread-safe supporto UDP a partire da marzo 2016:

  • È necessario utilizzare il/modello piatto Radio (molto simile al Pub/Sub)
  • Supportato in libzmq e czmq
  • Vedere tests/test_udp.cpp, tests/test_radio_dish.cpp nel codice sorgente libzmq
  • ripartizione completa providided da Doron Somech su zeromq-dev @ elenco delle discussioni: Thread safe Pub/Sub and Multicast
+0

Il link alla mailing list è rotto, vai [qui] (http://lists.zeromq.org/pipermail/zeromq-dev/2016-March/030032.html) invece – gbs

+0

@ gbs grazie! Ho aggiornato il collegamento. –