La diferencia está en la definición del transporte, en la parte 4 se usa tcp y en este caso se usará epgm que se usa para multicast.
El ejemplo que se mostrará se basa en el artículo de Saghul Ibarra en su blog.
El productor crea una línea de comandos donde se pasa el texto al consumidor, el consumidor recibe el texto y sólo se muestra en pantalla el texto que está definido en la subscripción.
En el productor se define unas opciones en el socket, en el sitio de ZeroMQ tiene una explicación de las opciones para crear el socket. LINGER con parámetro cero define que se descarte mensajes que no son enviados.
El código del productor se muestra a continuación:
#!/usr/bin/env python # # producer #Se importa ZeroMQ import zmq #Se crea la instancia de la clase Context. context = zmq.Context() #Se define el socket con parametro PUB socket = context.socket(zmq.PUB) #Se define unas opciones en el socket #esta opcion LINGER con valor cero, descarta mensajes no enviados socket.setsockopt(zmq.LINGER, 0) #Se conecta al socket a la IP y puerto #por medio de multicast socket.connect('epgm://192.168.10.96:5000') #Se crea un ciclo #si se envia el texto salir, se envia y luego finaliza el ciclo #si no, se envia el texto while True: mensaje = raw_input("->") print mensaje socket.send(mensaje) if mensaje == "salir": break socket.close()El código del programa consumidor es el siguiente:
Las siguientes figuras muestran el resultado de la ejecución de ambos programas:
#!/usr/bin/env python
#Importar zeroMQ
import zmq
#Se crea la instancia de la clase contexto
context = zmq.Context()
#Se define el socket con parametro SUB
socket = context.socket(zmq.SUB)
#Se conecta el socket a la IP y puerto del productor
#con el transporte epgm
socket.connect('epgm://192.168.10.96:5000')
#Se define los textos que se recibe la informacion.
#prueba, hora y salir.
socket.setsockopt(zmq.SUBSCRIBE, 'prueba')
socket.setsockopt(zmq.SUBSCRIBE, 'hora')
socket.setsockopt(zmq.SUBSCRIBE, 'salir')
#Se define un ciclo,
#se recibe la informacion
#Si el texto es salir se muestra en pantalla
#finaliza el ciclo, si no se muestra
#el texto en pantalla
while True:
rcv = socket.recv()
print rcv
if rcv == "salir": break
Productor:
Consumidor:
No hay comentarios:
Publicar un comentario