Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending raw bytes over ZeroMQ in Python

I'm porting some Python code that uses raw TCP sockets to ZeroMQ for better stability and a cleaner interface.

Right off the bat I can see that a single packet of raw bytes is not sent as I'm expecting.

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

Which is the current working code. This is the same code using 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')

But when I inspect the packets going over the net, they're definitely not what I'm expecting. What am I missing here?

Also, when testing this code on the loopback interface (127.0.0.1) with a dummy server it seems to work just fine.

Using Python 2.7 if it matters (unicode or whatnot).

like image 905
Yuval Adam Avatar asked Sep 27 '12 13:09

Yuval Adam


1 Answers

Oh. Wow. I overlooked a major flaw in my test, the remote server I was testing on was expecting a raw TCP connection, not a ZMQ connection.

Of course ZMQ wasn't able to transfer the message, it didn't even negotiate the connection successfully. When I tested locally I was testing with a dummy ZMQ server, so it worked fine.

If I'd have posted the server code it would have immediately made sense that that was the problem.

In any case, sorry for the false alarm.

like image 107
Yuval Adam Avatar answered Nov 10 '22 07:11

Yuval Adam