我有一个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的控制台中看到第一条消息。
答案 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(路由器/经销商)
查找每种套接字类型的发送/接收模式