2013-07-03 100 views
2

我需要能夠讓客戶端使用NodeJS套接字進行連接,但隨後能夠在稍後將數據發送到特定客戶端。在連接上下文之外引用NodeJS網絡套接字

這裏是什麼,我現在在做一個例子:

var net = require('net'); 
var sockets = []; 

var server = net.createServer(function(c) { 
    c.sock_id = sockets.push(c); 
    c.on('close', function() { 
     delete sockets[c.sock_id]; 
    }); 
}); 
server.listen(1234, function() {}); 


function send_to_socket(id,message) { 
    sockets[id].write(message); 
} 

這似乎並不像我來處理此特別是在插座都存儲在類似的Redis環境的正確途徑。

有人可以澄清正確的方法來處理這個問題嗎?

回答

0

套接字應該有唯一的標識符。如果它們在連接層上沒有唯一標識,那麼您必須手動創建自己的身份標識。它可以是processId + increment或任何其他網絡可靠標識。

然後有工人擁有套接字並負責處理其消息隊列以及發送消息。
Redis可以輕鬆存儲套接字的ID,但必須存儲該套接字綁定的工作者ID。
然後,您需要在工作人員之間進行直接通信,以便能夠向對方發送消息。這可以通過Redis通過爲工作人員或套接字建立消息隊列來完成,負責此套接字的工作人員將提取消息並處理它們以進行發送。
或者您可以直接與員工進行溝通,例如使用ZeroMQ,並直接向他們發送消息。我會爲消息推薦Redis解決方案。即使它是一個單一的輸入點,但這種解決方案將更加靈活和可靠。

最好將套接字列表保存爲鍵值對象,其中鍵將是套接字的ID,並且值 - 具有更多信息的套接字或對象以及套接字自身。
要將數據附加到套接字,您應該能夠簡單地將值添加到套接字對象。