在套接字之间共享会话。 (从所有活动选项卡注销用户)

我正在使用node.js express框架构build简单的学习聊天应用程序。 我有一个问题。 如果用户有多个选项卡处于活动状态,并且他在一个选项卡上注销。 我想closures连接到其他选项卡,并redirect到login页面。 但是我遇到了一个问题。 即使用户注销了其他套接字会话没有改变(我正在使用passport.socketio包,所以我有当前用户在socket.handshake.user)。 我做错了什么? 提前致谢。

如果你有n个不同的标签,实际上有n个不同的套接字。 实现你想要的一种方式是使来自特定用户的所有socketsjoin单个房间 。

io.on('connection', function (socket) { socket.join(socket.handshake.user.id); // rest of your code } 

并且在注销代码中向该特定房间发出事件“注销”。

 io.sockets.in(socket.handshake.user.id).emit('logout') 

现在在客户端,你可以写一个“注销”事件监听器,redirect到你想要的位置。

在你的应用程序中,你将不得不查看所有打开的套接字,find匹配的用户名并手动终止它们。