2011-12-13 26 views
13

Soy un novato en ZERMQ. ZeroMQ tiene transportes TCP, INPROC e IPC. Estoy buscando ejemplos usando python y inproc en Winx64 y python 2.7, que también podrían usarse para Linux.¿Cómo usar los transportes inproc e ipc de Zeromq?

Además, he estado buscando métodos de transporte UDP y no puedo encontrar ejemplos.

El único ejemplo que he encontrado es

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) 

El caso de uso que estoy pensando es: UDP como la distribución de la información. Probar Push/Pull usando TCP es más rápido o sería más rápido.

Aquí es ejemplo de prueba> ..............

Servidor:

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, "]" 

error de error:

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 

Respuesta

9

Por lo que yo sé, UDP no es compatible por 0MQ. Además, IPC solo se admite en sistemas operativos que tienen una implementación conforme a POSIX de canalizaciones con nombre; entonces, en Windows, realmente solo puedes usar 'inproc', TCP o PGM. Sin embargo, más allá de todo esto, una de las principales características de 0MQ es que su protocolo es solo parte de la dirección. Puedes tomar cualquier ejemplo, cambiar la dirección del socket, y todo debería funcionar bien (sujeto, por supuesto, a las restricciones antes mencionadas). Además, el ZGuide tiene muchos ejemplos (muchos de los cuales están disponibles en Python).

+0

Consulte ediciones .... ejemplo agregado ... de error msg. – Merlin

+0

@Merlin: ¿están estos en proceso por separado? porque 'inproc' solo es adecuado como reemplazo de los escenarios de subprocesamiento. – pblasucci

+0

buscando por ejemplo para probar ... en python, ¿puede señalar – Merlin

8

Si (and only if) se utiliza el ZMQ_PUB o tomas ZMQ_SUB - lo que no se hace en los ejemplos que dio, en los que utilice router, XREQ, etc - se puede utilizar UDP, o más precisamente, UDP multidifusión a través de

"EPGM: // host: puerto"

EPGM significa Encapsulated PGM, es decir PGM encapsulado en UDP, que es más compatible con la infraestructura de red existente de PGM prima.

Ver también http://api.zeromq.org/2-1:zmq-pgm

No sé de ningún apoyo UDP para escenarios unicast sin embargo.

0

que tenían el mismo problema cuando mis de pyzmq y la versión de ZMQ es versión anterior, puedo actualizar la versión a 15.2.0, entonces resuelto el problema, el prefijo de la dirección ipc que he utilizado es "inproc: //"

os: win7-x64 python: 2.7.6

3

ZeroMQ tiene soporte UDP flujos seguros partir de marzo de 2016:

  • Tienes que utilizar el patrón de Radio/plato (muy similar al Pub/Sub)
  • soportado en libzmq y czmq
  • Ver tests/test_udp.cpp, tests/test_radio_dish.cpp en el código fuente libzmq
  • desglose completo providided por Doron Somech en zeromq-dev @ lista de temas: Thread safe Pub/Sub and Multicast
+0

El enlace a la lista de correo está roto, vaya [aquí] (http://lists.zeromq.org/pipermail/zeromq-dev/2016-March/030032.html) en su lugar – gbs

+0

@gbs gracias! He actualizado el enlace. –