零MQ路由器,经销商消息编码格式



我写了一个应用程序,它是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!'

最新更新