【发布时间】:2014-01-18 17:02:51
【问题描述】:
我正在使用 node.js 和 socket.io 创建一个包含多个游戏室的游戏大厅。我想要做的是阻止用户在多个选项卡中打开大厅。我的想法是,当打开一个新选项卡时,断开前一个选项卡。我想我可以通过跟踪已经打开的选项卡的 socket.id 来实现这一点。
//Keep track of the online users
var onlineUsers = new Array();
sessionSockets.on('connection', function(err, socket, session){
socket.on('joinlobby', function(){
//Disconnect the users previous socket if their username is already in the onlineUser array
console.log("DISCONNECTED: " + onlineUsers[session.username]);
socket.disconnect(onlineUsers[session.username]);
onlineUsers[session.username] = socket.id;
console.log("CONNECTED: " + onlineUsers[session.username]);
});
});
Joinlobby 在页面首次加载时触发。我正在使用session.socket.io,所以我可以访问套接字中的会话数据。我使用用户名作为数组键,并存储当前的 socket.id。现在我遇到的问题是它的行为似乎有点不一致。有时它什么也不做,两个选项卡都没有断开连接,而其他时候看起来两个选项卡都断开连接。控制台中没有错误,所以任何人都可以看到我的方法有问题吗?控制台输出的一个例子是:
DISCONNECTED: dOW2y-fq-aDW7t0sRUKn
info - booting client
info - transport end by forced client disconnection
info - transport end (booted)
CONNECTED: 9vZbMC85x9OQsFo9RUKo
即使它显示已连接,它也不会让我发送或接收任何消息。任何帮助将不胜感激,谢谢。
【问题讨论】:
标签: javascript node.js session websocket socket.io