27 may. 2012

Tutorial de ZeroMQ con Python. Parte 2.

Continuando con los artículos sobre ZeroMQ, en esta ocasión se muestra el uso del patrón de mensaje PAR (comunicación entre compañeros exclusivamente).

Los artículos se basan en el artículo de Nicholas Piël, una Introducción a ZeroMQ.

Socket par son muy similares a los sockets regulares. La comunicación es bidireccional, no hay un específico estado almacenado dentro del socket y solamente se puede conectar con un compañero.

La figura representa la estructura de sockets pares, el servidor escucha en un puerto seguro y un cliente se conecta a el. Las líneas rojas muestran el flujo de los mensajes, en este patrón ambos extremos usan el patrón par, y los mensajes fluyen de manera bidireccional.


Se muestra a continuación el código del servidor:
#!/usr/bin/env python #Importar zmq import zmq #Se crea la instancia del contexto context = zmq.Context() #Se crea el socket del tipo PAR socket = context.socket(zmq.PAIR) #Se asocia a una IP y puerto donde escucha el servidor. socket.bind("tcp://127.0.0.1:5555") #Se crea un ciclo. while True:     #Se recibe un mensaje del cliente     mensaje = socket.recv()     #Se muestra en pantalla     print "Recivo", mensaje     #Se envia de vuelta el mensaje     socket.send(mensaje)
El código del cliente es el siguiente:
#!/usr/bin/env python
#Se importa zmq
import zmq
#Se crea la instancia del contexto
context = zmq.Context()
#Se crea el socket con argumento del tipo de mensaje Par.
socket = context.socket(zmq.PAIR)
#Se conecta al servidor dado la IP y puerto.
socket.connect("tcp://127.0.0.1:5555")
#Se crea un cilo de 100 repeticiones.
for i in range(100):
    #Se define el mensaje a pasar
    mensaje = "mensaje %s" % i
    #Se pasa el mensaje al servidor
    socket.send(mensaje)
    #Se presenta en pantalla el mensaje
    print "Enviando", mensaje
    #Se recibe el mensaje de vuelta
    msg_in = socket.recv()
    #Se presenta en pantalla el mensaje de vuelta
    print "Recibido:", msg_in
El resultado del lado del servidor se muestra en la siguiente figura:


El resultado del lado del cliente se muestra en la siguiente figura:


Al intentar ejecutar 2 clientes al mismo tiempo el servidor termina con un mensaje de error por que sólo maneja una comunicación bidireccional con un sólo compañero.

Publicar un comentario en la entrada

AddThis