zeromq ROUTER,DEALER消息编码格式

时间:2014-02-08 08:11:34

标签: python node.js zeromq

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

2 个答案:

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