zeromq REP节点只会收到第一条消息(Req,Rep pattern)

时间:2014-02-07 16:17:50

标签: python node.js zeromq

我有一个nodejs应用程序,它监听来自客户端的消息(python应用程序)。 我用于通过zmq进行通信的模式是REQ / REP模式。 主应用程序应该从许多客户端获取消息。它不会回复它们,只是收到消息。 问题是主应用程序只会收到第一条消息,而下一条消息不会显示在nodejs app console中。

换句话说,每次我启动nodejs应用程序时,我只会收到一条消息。

这是我的代码:

Nodejs app

var responder = zmq.socket('rep');
responder.on('message', function(request) {
    console.log(request);
    //here, it seems this function will be called just once!
});

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.REQ)
        socket.connect("tcp://127.0.0.1:8000")
        socket.send('blaaaa')
        print 'message sent!'

python部分在函数内部。我可以看到“消息已发送!”的输出在python控制台(我的意思是很多'消息发送!')。 但是我无法在nodejs app中看到消息。只需在nodejs的控制台中看到第一条消息。

1 个答案:

答案 0 :(得分:3)

在使用REQ / REP模式时,您实际上需要在给出下一个请求之前响应请求 - 您当时只处理一个请求。

var responder = zmq.socket('rep');
responder.on('message', function(request) {
    console.log(request);
    responder.send('Here comes the reply!');
});

回复,您将收到下一个。如果你不想回复,那么你需要选择一些其他套接字对而不是req / rep - ex:push / pull或者如果你想同时处理多个请求,可以查看xreq / xrep(路由器/经销商)

如果有疑问,请在http://api.zeromq.org/2-1:zmq-socket

查找每种套接字类型的发送/接收模式