26 may. 2012

Tutorial de ZeroMQ con python . Parte 1.

ZeroMQ es una librería de mensajes, permite crear complejos sistemas de comunicación con poco esfuerzo (sistemas de cola).

ZeroMQ es más rápido que otros sistemas de mensajes basados en el protocolo AMQP.

En este artículo se explicará un uso sencillo de zeroMQ al estilo cliente y servidor. Se usará el puerto 5000 para la comunicación entre el cliente y servidor. En el cliente se genera de forma aleatoria 2 números que se le pasan al servidor que sacará una cuenta y devuelve el resultado al cliente quien muestra el resultado en pantalla. La generación de números se realiza 1000 veces, luego le pasa al servidor la letra q la cual es la señal para terminar el servidor.


Para instalar zeroMQ para python se tiene que instalar python-zmq y/o python3-zmq para python3:
#apt-get install python3-zmq python-zmq


Servidor: El código del servidor es el siguiente:
 #!/usr/bin/env python
#Se importa zeromq
import zmq
#Se crea la instancia del contexto de zmq.
context = zmq.Context()
#Se define el socket con parámetro respuesta REP.
socket = context.socket(zmq.REP)
#Se asocia la dirección IP y el puerto donde el servidor escucha las peticiones.
socket.bind("tcp://127.0.0.1:5000")
#Se define un contados
c = 1
#Se genera un ciclo que sólo finaliza si se recibe la letra q.
while True:
    #Se recibe los mensajes.
    msg = socket.recv()
    #Se consulta si la longitud del mensaje es 1 y es la letra q se termina el ciclo
    if len(msg) == 1 and msg == "q":
        break
    #Se separa los datos que viene en un string separados por :
    datos = msg.split(":")
    #se realiza una suma con los datos recibidos.
    resultado = int(datos[0]) + int(datos[1])
    #Se muestra en pantalla el resultado
    print "Iteracion: %s ,He recibido: %s, el resultado es: %s "  %(c,msg,resultado)
    #Se envía el resultado al cliente
    socket.send(str(resultado))
    #Se incrementa el contador.
    c += 1

 
El código del cliente es el siguiente:
#!/usr/bin/env python #Se importa zeromq y random import zmq import random
#Se crea la instancia del contexto context = zmq.Context()
#Se crea el socket y se para el argumento de petición REQ socket = context.socket(zmq.REQ)
#Se coencta a la IP y puerto donde escucha el servidor socket.connect("tcp://127.0.0.1:5000")
#Se genera un ciclo de 1000 repeticiones for i in range(1000):
    #Se crea el string con el mensaje, se pasa 2 aargumentos aleatorios     msg = "%s:%s" %(random.randint(1, 1000),random.randint(1, 1000))
    #Se envia el mensaje al servidor     socket.send(msg)
    #Se recibe el mensaje del servidor     msg_in = socket.recv()
    #Se muestra en patalla los datos y el resultado     print "Iteracion: %s, Enviado: %s, Recibido: %s" %(i,msg,msg_in)
    #Si se llea a la iteración 999 se envía la letra q para finalizar     if i ==  999: socket.send("q")
El resultado del lado del cliente y del servidor es el siguiente:

La figura muestra la ejecución del script servidor:
La figura muestra la ejecución del script cliente:


Publicar un comentario en la entrada

AddThis