获取node.js套接字closures/结束事件上的远程端点属性

我有一个node.js服务器跟踪所有连接到它的“客户端”,使用一个关联数组的套接字,因为我需要发送一些数据到特定的客户端有时。 该数组中的键是由…组成的string

socket.remoteAddress + ':' + socket.remotePort 

并且值是传递给提供给net.createServer(…)的callback的套接字实例。有时,客户端因为某种原因断开连接,我收到“结束”,然后“closures”事件。 我想从我的客户端registry中删除断开连接的客户端,但在close / end事件callback中,remoteAddress和remotePortvariables未定义。 他们可以以某种方式检索?

为了显示:

 var registry = {} var server = net.createServer(function (socket) { socket.on('connect', function(){ registry [socket.remoteAddress + ':' + socket.remotePort] = socket; }); socket.on('close', function(had_error){ // ****************************************************** // socket.remoteAddress and remotePort are undefined here // ****************************************************** var id = socket.remoteAddress + ':' + socket.remotePort; // ************************************************************* if(registry.hasOwnProperty(id) delete socket.id; }); }); 

我认为你应该使用socket.id而不是创build你自己的可能不是唯一的对象属性

 socket.on('connect', function(){ registry [socket.id] = socket; }); 

UPDATE

节点提供基本的http API。 Http是无状态的。 HTTP会话允许将信息与个人访问者相关联,但节点没有本地会话支持。

看看快递 ,这是一个很好的networking框架与会议的支持

另外,如果您需要以实时方式发送消息,请查看socket.io

更新V2

您可以将您自己的ID属性添加到套接字对象:

 function randomID(len){ //Generate a random String return randID; } var registry = {} var server = net.createServer(function (socket) { socket.on('connect', function(){ var uid = randomID(32); socket.id = uid; registry [uid] = socket; }); socket.on('close', function(had_error){ var uid = socket.id; // ************************************************************* console.log("Socket ID " + uid + " disconnected") }); });