您好我正在尝试将聊天构建到应用程序中。我想知道的是,当用户注销网站时,我还如何销毁与该会话关联的 socket.io 握手,以便用户在注销时无法从另一个选项卡发送消息。
如果有任何帮助,我正在使用 expressjs。
好吧,以防有人发现这个并想知道我确实想通了。您可以访问套接字断开功能。我有用户 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();
}
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();
}
}
}