2012-09-27 26 views
6

Estoy portando un código Python que usa conectores TCP sin formato a ZeroMQ para una mejor estabilidad y una interfaz más limpia.Envío de bytes sin procesar a través de ZeroMQ en Python

Al instante puedo ver que un solo paquete de bytes sin formato no se envía como estoy esperando.

En raw sockets:

import socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
sock.connect((HOST, PORT)) 
sock.send('\x00\x01\x02 and some more raw bytes') 

¿Cuál es el código de trabajo actual. Este es el mismo código utilizando ZeroMQ:

import zmq 
context = zmq.Context() 
sock = context.socket(zmq.REQ) # this connection utilizes REQ/REP 
sock.connect('tcp://{0}:{1}'.format(HOST, PORT)) 
sock.send('\x00\x01\x02 and some more raw bytes') 

Pero cuando examino los paquetes que van encima de la red, que definitivamente no eres lo que estoy esperando. ¿Que me estoy perdiendo aqui?

Además, al probar este código en la interfaz de bucle invertido (127.0.0.1) con un servidor ficticio, parece funcionar bien.

Usando Python 2.7 si es importante (unicode o lo que sea).

+0

No hay salida, estoy inspeccionando el tráfico de red sin procesar, ¿es eso lo que estás buscando? –

+1

zeromq usa su propia clasificación de datos en sockets; Si olfateas los paquetes, no tienen que ser exactamente los mismos –

+0

@BartekBanachewicz - muy cierto, gracias. Note mi respuesta desde ahora. –

Respuesta

4

Oh. Guau. Pasé por alto un error importante en mi prueba, el servidor remoto en el que estaba probando esperaba una conexión TCP sin procesar, no una conexión ZMQ.

Por supuesto, ZMQ no pudo transferir el mensaje, ni siquiera negoció la conexión con éxito. Cuando probé localmente, estaba probando con un servidor ZMQ falso, así que funcionó bien.

Si hubiera publicado el código del servidor, inmediatamente tendría sentido que ese era el problema.

En cualquier caso, disculpe la falsa alarma.

Cuestiones relacionadas