Socket.io:在任何时候获取客户端会话ID

我知道如何检索用户连接时的客户端会话ID。

但是,我想随时找回它,例如当客户点击某个东西时,我想知道是谁点了什么,他们的sessionID是什么。

socket.sessionID不起作用,也没有socket.handshake.sessionID

例如 :

我有这个快车路线:

 .get('/result/:survey', function(req, res) { res.redirect('/result/'+req.params.survey+'/1'); }) 

就在redirect之前,我想让用户join一个套接字空间,并获得他们的sessionID。 我怎么可能这样做? 根据文档,这将是socket.join('room')但我怀疑socket只代表我与客户端,而不是与其他客户端的连接。 也许我只是无法理解套接字!

从版本1.0开始,您可以通过这种方式获得客户端的sessionid:

 var socket = io(); socket.on('connect', function(){ var sessionid = socket.io.engine.id; ... }); 

我不确定你的意思,因为“当客户端点击某个东西时”假定你的意思是“客户端”(你可以使用socket.socket.sessionid ),但是将其存储在一个客户端arrays中你的意思是“服务器端”(你可以通过socket.id来访问它)。

客户端:

 var socket = io.connect(); socket.on('connect', function() { var sessionid = socket.socket.sessionid; ... }); 

服务器端:

 io.sockets.on('connection', function(socket) { var sessionid = socket.id; ... }); 

我将客户端ID存储在服务器端事件处理程序中,只需:

 // server.js io.sockets.on('connection', function (client) { client.on('event_name', function (_) { var clientId = this.id; } } 

我使用的socket.io版本2.0.4,您可以在任何时间通过在处理程序中使用this.id访问客户端ID。 例如:

 socket.on('myevent',myhandler); function myhandler(){ console.log('current client id: '+this.id); } 

显然,处理函数是在Socket上下文本身中执行的,同样会让你访问其他的自身属性,如client (连接的客户端对象), request (当前的请求对象正在处理)等等。你可以在这里看到完整的API https ://socket.io/docs/server-api/#socket