2014-02-07 27 views
1

我有一個nodejs應用程序,它偵聽來自客戶端(python應用程序)的消息。 我用於通過zmq進行通信的模式是REQ/REP模式。 主應用程序應該從許多客戶端獲取消息。它不會回覆他們,只會收到消息。 問題是主應用程序只會獲得第一條消息,而下一條消息不會顯示在nodejs應用程序控制臺中。zeromq REP節點只會得到第一條消息(Req,Rep模式)

換句話說,每次我啓動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...'); 
    } 
}); 

蟒(客戶端)部分:

socket = context.socket(zmq.REQ) 
     socket.connect("tcp://127.0.0.1:8000") 
     socket.send('blaaaa') 
     print 'message sent!' 

蟒蛇部分是一個函數裏面。我可以看到「發送的消息!」的輸出在python控制檯(我的意思是很多'消息發送!')。 但我無法在nodejs app.just中看到消息,只有在nodejs的控制檯中看到第一條消息。

回答

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

相關問題