从socket.io获取断开连接的用户

我在Node.js上写了一个实时聊天系统 用户连接服务器的地方我正在创build独特的哈希键[一次创build],并join他在新的聊天室。 我想显示用户是否在线。 而用户断开sockets,我无法得到用户的聊天室,所以我无法find用户在线或不。 请build议有没有更好的方法来做到这一点。

Server.js

socket.on('newUser',function (user) { chat.createChatRoom(con, user.email, user.phone, function (res,user_id,chatToken) { chatToken="TOK"+chatToken; //Here we using TOK for some identical purposes chatRoom(socket,chatToken,1); io.sockets.in(chatToken).emit('newUser', {chatToken:chatToken,user_id:user_id,response:res,rooms:io.sockets.adapter.rooms}); io.emit('userConnects',chatToken); console.log(JSON.stringify(io.sockets.adapter.rooms)); }); }); 

创build聊天室function:

 var createChatRoom = function (con, email, phone,callback) { var chatToken = require('crypto').createHash('md5').update(email).digest("hex"); con.query("SELECT * FROM USER WHERE `email`='" + email + "'", function (error, result) { if (error) throw error; if (result.length == 0) { con.query("INSERT INTO user(email,chat_token,phone) VALUES('" + email + "','" + chatToken + "','" + phone + "')", function (error1, result1) { return callback(1,result1.insertId,chatToken); }); } else { return callback(0,result[0].user_id,chatToken); } }); }; 

当用户断开连接时,我想获取chatToken 。 但是我只能得到套接字ID。

创build新的聊天用户时,还需要将新的用户的socket.id存储在一个新的列中。 然后,当用户断开连接时,您可以通过socket.idsearch用户。

 chat.createChatRoom(con, socket.id, user.email, user.phone, function (res,user_id,chatToken) {...}) 

实际上,如果唯一的目的是识别一个套接字连接,你甚至不需要自己创build一个聊天令牌。 因为socket.id是随机的,不可猜测的,每个套接字连接的唯一标识符。