2 jun. 2012

Tutorial de ZeroMQ con Python( REP/REQ y PUB/SUB). Parte 5.

En la revista Linux Magazine versión en español publicaron un artículo sobre ZeroMQ con Python.

Explican el uso de 2 patrones en conjunto, REP/REQ y PUB/SUB. Colocan como ejemplo una simulación del proceso de envío de tweets de twitter.

La siguiente figura muestra la simulación:

El emisor genera los mensajes, el tuiter los recibe y los publica, luego cada receptor se suscribe al tuiter y recibe la información que le interesa.

EL código del emisor es el siguiente:


#!/usr/bin/python




#Se importa zeroMQ

import zmq

#Se crea el contexto

context = zmq.Context()

#Se crea el socket con el parametro REQ

socket = context.socket(zmq.REQ)

#Se asocia la IP y el puerto del socket.

socket.connect("tcp://127.0.0.1:4000")




#Se genera los mensajes estilo tuiter y se envia al socket.

for i in ['@_seraph1 Esta es una prueba','@otro viendo el juego', '@_seraph1 otra prueba','@otro otro']:

 socket.send(i)

 msg_in = socket.recv()

El código del tuiter es el siguiente:

#!/usr/bin/env python

#Se importa zeroMQ

import zmq

#Se importa choice de random

from random import choice

#Se crea el contexto

context = zmq.Context()

#Se define el socket de recepcion con argumento REP

socket_recv = context.socket(zmq.REP)

#Se asocia a una IP y puerto el socket de recepcion

socket_recv.bind("tcp://127.0.0.1:4000")




#Se define el socket de publicacion con argumento PUB

socket = context.socket(zmq.PUB)

#Se asocia la ip y un puerto distinto al anterio socket

socket.bind("tcp://127.0.0.1:5000")




#Se crea un ciclo

while True:

 #Se recibe el mensaje del socket de recepcion

 msg = socket_recv.recv()

 #Se envia el mensaje de recepcion

 socket_recv.send(msg)

 #Se muestra el mensaje en pantalla

 print "Reenvio: {0}".format(msg)

 #Se envia  el mensaje al socket de publicacion

 socket.send(msg)

Se muestra ahora el código de los receptores:
Receptor 1:

#!/usr/bin/python

#Se importa zeroMQ

import zmq

#Se crea el contexto

context = zmq.Context()

#Se crea el socket de suscripcion

socket = context.socket(zmq.SUB)

#Se asocia ese socket a la IP y puerto donde publica tuiter

socket.connect("tcp://127.0.0.1:5000")

#Se suscribe a escuchar los mensajes de @_seraph1

socket.setsockopt(zmq.SUBSCRIBE, "@_seraph1")

#se crea un ciclo donde se recibe los mensajes

while True:

 print "->",socket.recv()

Receptor 2:


#!/usr/bin/python

#Se importa zeroMQ

import zmq

#Se crea el contexto

context = zmq.Context()

#Se crea el socket de suscripcion

socket = context.socket(zmq.SUB)

#Se asocia ese socket a la IP y puerto donde publica tuiter

socket.connect("tcp://127.0.0.1:5000")

#Se suscribe a escuchar los mensajes de @otro

socket.setsockopt(zmq.SUBSCRIBE, "@otro")

#se crea un ciclo donde se recibe los mensajes

while True:

 print "->",socket.recv()




En la figura se muestra el resultado de tuiter:

En la siguiente figura se muestra el resultado del receptor 1:
Y por último el receptor 2:
En la versión de la revista no publicaron el código de los receptores.
Esto muestra el nivel de complejidad en sistema de colas que se puede lograr con ZeroMQ.

Publicar un comentario en la entrada

AddThis