我写了一个应用程序,它是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!'
如果您希望使用 DEALER/ROUTER 套接字,那么该消息实际上是作为回调函数的第二个参数给出的。
var responder = zmq.socket('router');
responder.on('message', function(header, body) {
console.log(body.toString('utf8'));
});
该消息采用缓冲区的格式,但您可以使用 .toString(编码)将其转换为字符串;
标头包含一个标识,这允许您稍后将响应/答案路由回发出原始请求的正确发送者/请求者。
对于您的应用程序,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!'