Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:zeromq [2013/07/03 11:58] alfred [Devices] |
fw:zeromq [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 2: | Línea 2: | ||
| * [[http://www.zeromq.org/|Página web del proyecto]] | * [[http://www.zeromq.org/|Página web del proyecto]] | ||
| * [[http://zguide.zeromq.org/page:all|Guía del framework]] | * [[http://zguide.zeromq.org/page:all|Guía del framework]] | ||
| + | * [[http://zeromq.github.io/pyzmq/api/index.html|Documentación pyzmq]] | ||
| ===== Uso de la librería ===== | ===== Uso de la librería ===== | ||
| Línea 97: | Línea 98: | ||
| * Si un publisher no tiene subscribers los mensajes quedarán desechados. | * Si un publisher no tiene subscribers los mensajes quedarán desechados. | ||
| * TCP con esta estructura es lento. | * TCP con esta estructura es lento. | ||
| + | * Para realizar una subscripción a todos los mensajes haremos: | ||
| + | <code python> | ||
| + | socket.setsockopt(zmq.SUBSCRIBE, "") | ||
| + | </code> | ||
| ==== Pipeline ==== | ==== Pipeline ==== | ||
| Funciona como el Rep-Req sólo que en este no hay una respuesta desde el otro nodo. Es perfecto para los mensajes en paralelo. Imaginemos la siguiente estructura: \\ | Funciona como el Rep-Req sólo que en este no hay una respuesta desde el otro nodo. Es perfecto para los mensajes en paralelo. Imaginemos la siguiente estructura: \\ | ||
| Línea 296: | Línea 300: | ||
| import zmq | import zmq | ||
| - | def zeromq_relay(a, b): | + | def zmq_streaming_device(a, b): |
| while True: | while True: | ||
| msg = a.recv() | msg = a.recv() | ||
| Línea 306: | Línea 310: | ||
| sys.stdout.write('.') | sys.stdout.write('.') | ||
| sys.stdout.flush() | sys.stdout.flush() | ||
| - | |||
| - | def zmq_streaming_device(upstream, downstream): | ||
| - | zeromq_relay(upstream, downstream) | ||
| context = zmq.Context() | context = zmq.Context() | ||
| Línea 317: | Línea 318: | ||
| zmq_streaming_device(s1, s2) | zmq_streaming_device(s1, s2) | ||
| </code> | </code> | ||
| - | ===== Patrones ===== | + | ===== Patrones Request/Reply ===== |
| - | ==== Patrones Request/Reply ==== | + | ===== Patrones Publish/Subscribe ===== |
| - | ==== Patrones Publish/Subscribe ==== | + | |
| ===== Avanzado ===== | ===== Avanzado ===== | ||
| ==== Control de flujo ==== | ==== Control de flujo ==== | ||
| Línea 335: | Línea 335: | ||
| ===== Notas ===== | ===== Notas ===== | ||
| * Saber la versión con ''zmq.zmq_version()''. | * Saber la versión con ''zmq.zmq_version()''. | ||
| + | * Para realizar conexiones no bloqueantes los usaremos con [[fw:gevent&#zeromq|greenlets]]. | ||
| + | * Para instalar la librería en el sistema: ''apt-get install libzmq-dev''. | ||
| + | ==== Instalar en Ubuntu ==== | ||
| + | Instalación de la librería del sistema: | ||
| + | <code> | ||
| + | $ sudo apt-get install python-dev libzmq-dev | ||
| + | </code> | ||
| + | Instalación en Python: | ||
| + | <code> | ||
| + | $ sudo pip install pyzmq | ||
| + | </code> | ||
| + | Recuerda que para utilizar ''pip'' has de tener instalado el paquete ''python-pip'' | ||
| + | ==== Instalar en Windows ==== | ||
| + | Necesitarás agregar el paquete ''VS2010 C++ redistributable''. | ||
| ==== Como... ==== | ==== Como... ==== | ||
| === Enviar\recibir varios paquetes === | === Enviar\recibir varios paquetes === | ||
| Línea 392: | Línea 406: | ||
| # Do the work | # Do the work | ||
| time.sleep(int(s)*0.001) | time.sleep(int(s)*0.001) | ||
| + | </code> | ||
| + | |||
| + | === Enviar no bloqueante === | ||
| + | * Pero cuidado, el objeto sender no se elminará hasta que los datos hayan sido enviados. | ||
| + | <code python> | ||
| + | sender.send(jdata, zmq.NOBLOCK) | ||
| </code> | </code> | ||