zeromq ROUTER,DEALER消息编码格式

我已经写了一个应用程序,它是使用zmq Router,Dealer模式相互沟通的nodejs(主应用程序)和python(客户端)应用程序。

问题是我无法读取从客户端发送到nodejs(路由器)应用程序的消息。 其编码如何。

代码如下简单:

var responder = zmq.socket('router'); responder.on('message', function(request) { console.log(request); // i could not read the messages here.its obfuscated }); responder.bind('tcp://127.0.0.1:8000', function(err) { if (err) { console.log(err); } else { console.log('Listening on 8000...'); } }); 

python:

 socket = context.socket(zmq.DEALER) socket.connect("tcp://127.0.0.1:8000") socket.send('blaaaa') print 'message sent!' 

如果你想使用DEALER / ROUTER套接字,那么这个消息实际上是作为callback函数的第二个参数给出的。

 var responder = zmq.socket('router'); responder.on('message', function(header, body) { console.log(body.toString('utf8')); }); 

消息格式为Buffer,但可以使用.toString(encoding)将其转换为string。

标题包含一个标识,这允许您稍后将响应/应答发送回发出原始请求的正确发件人/请求者。

对于你的应用程序,PUSH-PULL似乎更合适:

 var zmq = require('zmq'); var responder = zmq.socket('pull'); responder.on('message', function(request) { console.log(request.toString()); // Use `toString` to convert Buffer to string }); responder.bind('tcp://127.0.0.1:8000', function(err) { if (err) { console.log(err); } else { console.log('Listening on 8000...'); } }); 

 import zmq context = zmq.Context() socket = context.socket(zmq.PUSH) socket.connect("tcp://127.0.0.1:8000") socket.send('blaaaa') print 'message sent!'