您好我正在尝试将聊天内容构建到应用程序中。我想知道的是,当用户退出网站时,我如何销毁与该会话相关联的socket.io握手,以便用户在注销时无法从另一个标签发送消息。
如果有任何帮助,我正在使用expressjs。
答案 0 :(得分:6)
好吧,如果有人发现这一点,并想知道我确实搞清楚了。 您可以访问套接字断开功能。我有用户ID的对象和他们的套接字ID,所以当有人退出时我打电话给
app.get("/logout", function(req,res){
//do other logging out stuff
sockets.disconnectUser(req.session.user_id);
}
// Disconnect User function
sockets.disconnectUser = function(user_id){
sockets.socket(users[user_id]).disconnect();
}
答案 1 :(得分:1)
socket.io对象包含有关所有连接的套接字以及每个套接字的sessionID的信息。因此,可以遍历连接的套接字,并断开与正在注销的sessionID关联的套接字。这种方法无需手动跟踪用户和套接字ID。
使用socket.io @ 2.2.0,express @ 4.17.1和express-session@1.16.2测试的示例代码。
const SocketIO = require('socket.io');
let sio = new SocketIO;
app.get('/logout', function(req, res) {
//do other logging out stuff
logoutSocketsIO(req.sessionID);
});
// Iterate through all connected sockets and close those which are associated
// with the given sessionID
// Note: One sessionID can have multiple sockets (e.g. many browser tabs)
function logoutSocketsIO(sessionID) {
let connections = sio.sockets.connected;
for(let c in connections) {
let socketSessionID = connections[c].conn.request.sessionID;
if(sessionID === socketSessionID) {
connections[c].disconnect();
}
}
}