【问题标题】:zeromq REP node will only get the first message (Req,Rep pattern)zeromq REP 节点只会获取第一条消息(Req,Rep 模式)
【发布时间】:2014-07-07 19:09:36
【问题描述】:

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

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

这是我的代码:

Nodejs 应用程序

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 应用程序中看不到消息。只是在 nodejs 的控制台中看到了第一条消息。

【问题讨论】:

    标签: python node.js zeromq


    【解决方案1】:

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

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

    响应,您将收到下一个。如果您不想响应,那么您需要选择除 req/rep 之外的其他套接字对 - 例如:push/pull 或者如果您希望同时处理多个请求,可以查看 xreq/xrep(路由器/经销商) .

    如有疑问,请在http://api.zeromq.org/2-1:zmq-socket 查找每种套接字类型的发送/接收模式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-13
      • 2016-11-17
      • 2014-01-03
      • 1970-01-01
      • 2020-07-17
      • 2013-06-07
      • 2014-10-11
      • 1970-01-01
      相关资源
      最近更新 更多