2012-09-27 8 views
6

Sto eseguendo il porting di un codice Python che utilizza socket TCP non elaborati su ZeroMQ per una migliore stabilità e un'interfaccia più pulita.Invio di byte non elaborati su ZeroMQ in Python

Proprio fuori dal blocco vedo che un singolo pacchetto di byte non viene inviato come mi aspetto.

In raw socket:

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') 

che è il codice di lavoro corrente. Questo è lo stesso codice utilizzando 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') 

Ma quando ho ispezionare i pacchetti che vanno oltre la rete, non sono sicuramente quello che mi aspetto. Cosa mi manca qui?

Inoltre, quando si verifica questo codice sull'interfaccia di loopback (127.0.0.1) con un server fittizio, sembra funzionare correttamente.

Utilizzo di Python 2.7 se è importante (unicode o whatnot).

+0

Non c'è uscita, sto ispezionando il traffico di rete non elaborato, è quello che stai cercando? –

+1

zeromq utilizza il proprio marshalling dei dati sui socket; se annusate i pacchetti, non devono essere esattamente uguali –

+0

@BartekBanachewicz - molto vero, grazie. Notare la mia risposta da poco tempo. –

risposta

4

Oh. Wow. Nel mio test ho trascurato un grosso difetto, il server remoto su cui stavo testando si aspettava una connessione TCP non elaborata, non una connessione ZMQ.

Ovviamente ZMQ non è stato in grado di trasferire il messaggio, non ha nemmeno negoziato correttamente la connessione. Quando ho provato localmente, stavo testando con un server ZMQ fittizio, quindi ha funzionato bene.

Se avessi pubblicato il codice del server, avrebbe immediatamente capito che quello era il problema.

In ogni caso scusa per il falso allarme.