到目前为止,我从文档中读到了
Rooms are left automatically upon disconnection
他们是automatically removed when everyone leaves
。但这不是我实际代码的情况:
io.on('connection', function(socket) {
socket.join(MainRoom);
io.sockets.adapter.rooms[socket.id].owner = socket.username;
//send the list of available rooms on connection
socket.to(MainRoom).emit('updateList',io.sockets.adapter.rooms);
socket.on('getUpdateList',function() {
io.to(MainRoom).emit('updateList',io.sockets.adapter.rooms);
});
socket.on('msg', function(msg) {
io.to(MainRoom).emit('msgFront',msg);
});
socket.on('disconnect', function() {
console.log('leaving '+socket.id);
io.to(MainRoom).emit('updateList',io.sockets.adapter.rooms);
});
});
请注意,我使用MainRoom强制所有客户都加入它,以确保每个人都可以互相交谈。
默认情况下Each Socket in Socket.IO is identified by a random, unguessable, unique identifier Socket#id. For your convenience, each socket automatically joins a room identified by this id.
我的问题是,关闭/刷新浏览器标签后,所有以前加入的房间仍然存在,房间数量增加(连接时套接字会自动加入新房间..)
任何人都可以解释这种行为吗?
答案 0 :(得分:0)
<强>解决:强>
问题是我扩展了房间对象添加所有者属性:
closest()
这样就无法移除扩展的房间。我找到的解决方案是将所有者属性存储在一个关联数组中,这就是它。