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