我编写了一个应用程序,它是nodejs(主应用程序)和python(客户端)应用程序,我想使用zmq路由器,经销商模式相互通信。
问题是我无法读取从客户端发送到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...');
}
});
蟒:
socket = context.socket(zmq.DEALER)
socket.connect("tcp://127.0.0.1:8000")
socket.send('blaaaa')
print 'message sent!'
答案 0 :(得分:2)
如果您希望使用DEALER / ROUTER套接字,那么该消息实际上是作为回调函数的第二个参数。
var responder = zmq.socket('router');
responder.on('message', function(header, body) {
console.log(body.toString('utf8'));
});
消息采用缓冲区格式,但您可以使用.toString(编码)将其转换为字符串;
标题包含一个标识,这允许您稍后将响应/答案路由回发出原始请求的正确发件人/请求者。
答案 1 :(得分:0)
对于您的应用程序,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!'