2016-10-21 116 views
1

如何将会话特定信息存储在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); 
} 

如何将客户端变量仅用于与当前连接的客户端相关的操作(如果它被认为是静态的)?

谢谢。

回答

2

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

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

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

阵列[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); 
} 
+0

但是有可以只用于这种特定客户会话变量? – Josh

+1

在'连接'上生成一个socket.id,这是程序使用识别哪个套接字与它进行通信的id。所以在我提供的代码中,id:socket.id部分正在使用该唯一标识符。它不会告诉你这个人,因为如果他们断开连接并重新连接,它会发生变化,但当连接到服务器代码 – KM529

+0

时,它将成为该用户会话的专用标识符。因此,我需要手动进行管理?我认为套接字io会提供一些方法来存储仅适用于每个客户端会话的值,并将我从维护客户端及其会话的工作中拯救出来 – Josh