Socket io客户端特定变量

时间:2016-10-21 16:37:57

标签: node.js session variables scope socket.io

如何在socket io中存储会话特定信息?

var client={}; //is this static across all sockets (or connected clients) that are connected? 
io.on('connection', function(socket){

  client.connectiontime=Date.now();
});


//on another io.on('connection') for the same connected client
io.on('connection', function(socket){
 store(client.connectiontime);
}

如果将客户端变量视为静态,如何仅将此变量用于与当前连接的客户端相关的操作?

感谢。

1 个答案:

答案 0 :(得分:2)

首先,每个套接字都有一个可用于引用它的名称,但每次同一个客户端连接时都会更改,因此如果它应该在客户端离开后保留,则无效。如果你的目标是在某个地方存储连接时间(数据库?),那么你必须从客户端获得一个唯一的标识符,可以用来再次找到它们,类似于登录。然后,您将日期对象传递给处理存储该时间的函数。

您应该注意,“连接”仅在套接字第一次连接时调用。连接不是您通常在客户端执行某些操作时使用的事件,除非它们在每次访问服务器程序之间断开连接。

如果您确定只想使用Client对象,则可能必须创建一个客户端数组,并使用套接字ID作为密钥以便稍后访问该对象。然后你会有像

这样的东西

array [socket.id] .connectiontime = Date.now()

var client={}; //is this static across all sockets (or connected clients) that are connected? 
var clients = [];
io.on('connection', function(socket){
  clients[] = {
                id : socket.id
                connectiontime : Date.now()
  }
});


//on another io.on('connection') for the same connected client
io.on('connection', function(socket){
// Here you would search for the object by socket.id and then store
 store(client.connectiontime);
}