2012-08-25 26 views
0
socket.on('data', function(data) 
{ 
    console.log(socket.remoteAddress + ":" + socket.remotePort); 
} 

socket.on('close', function() 
{ 
    console.log(socket.remoteAddress + ":" + socket.remotePort); 
} 

來自數據處理程序的日誌顯示127.0.0.1:8000在關閉事件處理程序中獲取套接字的IP地址

來自關閉處理程序的日誌顯示爲undefined:undefined

我想保留使用IP:Port作爲密鑰的連接套接字列表。如果我不知道哪一個關閉了,我怎樣才能從列表中刪除它?關閉後,如何獲得封閉套接字的IP:端口?

+0

我會重新考慮這一點。你不需要它。套接字事件爲您提供套接字,並且套接字在存在時爲您提供IP地址。如果沒有套接字,IP地址本身就沒用。地圖的用途是什麼? – EJP

+0

會有其他數據與每個客戶端關聯,並且服務器偶爾需要寫入特定的客戶端(而不是響應套接字事件),所以我需要保留連接的客戶端列表,以便我可以單獨解決它們 –

+0

然後,您需要找到套接字的一個屬性,該屬性在關閉時不會更改,以便爲您的集合建立索引。 – EJP

回答

4

這就是我如何跟蹤客戶的:

server.on('connect', function(socket) 
{ 
    socket.key = socket.remoteAddress + ":" + socket.remotePort; 
    clients[socket.key] = socket; 

    socket.on('close', function() 
    { 
     delete clients[socket.key]; 
    } 
} 

由於大部分在Node.js的IRC通道對MSCDEX建議這個解決方案!

0
socket.on('connect', function() 
{ 
    socket.address = socket.remoteAddress + ":" + socket.remotePort;//save the address in socket object 
    console.log(socket.remoteAddress + ":" + socket.remotePort); 
}); 
socket.on('data', function(data) 
{ 
    console.log(socket.address); 
}); 

socket.on('close', function() 
{ 
    console.log(socket.address); 
}); 

只是保持與socket對象關聯的數據。希望這會有所幫助。

相關問題