28 may. 2012

Tutorial de ZeroMQ con Python. Parte 3.

Tomando como base el artículo de ZeroMQ parte 1, se puede crear varios servidores (como cluster de aplicación).

Está vez se crea 3 scripts servidores, pueden estar en el mismo equipo o en equipos diferentes. Lo único que cambie en cada scripts es el puerto donde escucha para el servicio.

En el cliente, se crean 3 sockets con los puertos donde escucha los 3 servidores.

La idea es pasar un mensaje por parte del cliente, los servidores los recibe y los envía de vuelta al cliente.

El código del script del lado del cliente es la siguiente:
#!/usr/bin/env python #importar zeromq import zmq #Se crea una instancia del contexto context = zmq.Context() #Se crea el socket con parametro peticion (REQ) socket = context.socket(zmq.REQ) #Se crean 3 sockets con la IP y los 3 puertos donde escucha #los 3 servidores. socket.connect("tcp://127.0.0.1:5000") socket.connect("tcp://127.0.0.1:6000") socket.connect("tcp://127.0.0.1:7000") #Se crea un ciclo de 100 repeticiones for i in range(100):     #Se crea el string del mensaje     mensaje = "mensaje %s" % i     #Se envia el mensaje     socket.send(mensaje)     #Se muestra en pantalla el mensaje enviado     print "Enviando", mensaje     #Se recibe el mensaje de vuelta     msg_in = socket.recv()
Los scripts de los servidores se muestra a continuación:
Servidor 1:
 
#!/usr/bin/env python

#Se importa zeroMQ
import zmq
#Se crea la instancia del contexto
context = zmq.Context()
#Se crea el socket pasandole como parametro respuesta (REP)
socket = context.socket(zmq.REP)
#Se asocia el socket a la IP y el puerto
socket.bind("tcp://127.0.0.1:5000")

#Se crea un ciclo
while True:
    #Se recibe el mensaje
    mensaje = socket.recv()
    #Se muestra en pantalla el mensaje recibido
    print "Recibiendo", mensaje
    #Se envia el mensaje de regreso al cliente
    socket.send(mensaje)
 
Servidor 2:
#!/usr/bin/env python

#Se importa zeroMQ
import zmq
#Se crea la instancia del contexto
context = zmq.Context()
#Se crea el socket pasandole como parametro respuesta (REP)
socket = context.socket(zmq.REP)
#Se asocia el socket a la IP y el puerto
socket.bind("tcp://127.0.0.1:6000")

#Se crea un ciclo
while True:
    #Se recibe el mensaje
    mensaje = socket.recv()
    #Se muestra en pantalla el mensaje recibido
    print "Recibiendo", mensaje
    #Se envia el mensaje de regreso al cliente
    socket.send(mensaje)
Servidor 3:
#!/usr/bin/env python

#Se importa zeroMQ
import zmq
#Se crea la instancia del contexto
context = zmq.Context()
#Se crea el socket pasandole como parametro respuesta (REP)
socket = context.socket(zmq.REP)
#Se asocia el socket a la IP y el puerto
socket.bind("tcp://127.0.0.1:7000")

#Se crea un ciclo
while True:
    #Se recibe el mensaje
    mensaje = socket.recv()
    #Se muestra en pantalla el mensaje recibido
    print "Recibiendo", mensaje
    #Se envia el mensaje de regreso al cliente
    socket.send(mensaje)

A continuación se inicia los 3 servidores y luego el cliente: En la siguiente figura se muestra los envíos realizados por el cliente:
 
Se muestra a continuación las figuras de los 3 servidores:
 
Servidor 1:
 
Servidor 2:

servidor 3:
 
 
Al ver las 3 figuras de los servidores se nota como se distribuye de forma equitativa 
la recepción de los mensajes.
 
Luego se puede complicar algo más este esquema agregando una cola entre los clientes 
y los servidores. 

Publicar un comentario en la entrada

AddThis