Node.js 所有人离开后,房间不会被搬走
据我从医生那里读到的 断开连接后,Node.js 所有人离开后,房间不会被搬走,node.js,socket.io,Node.js,Socket.io,据我从医生那里读到的 断开连接后,房间将自动离开,当所有人离开时,房间将自动移除。但我的实际代码并非如此: 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(
房间将自动离开
,当所有人离开时,房间将自动移除
。但我的实际代码并非如此:
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);
});
});
请注意,我使用的是一个主控室,所有客户端都必须加入其中,以确保每个人都可以相互交谈
默认情况下,Socket.IO中的每个套接字都由一个随机的、不可用的、唯一的标识符Socket#id标识。为方便起见,每个套接字自动加入一个由该id标识的房间。
我的问题是,在关闭/刷新“浏览器”选项卡后,所有以前连接的房间仍然存在,并且房间数量会增加(连接时,套接字会自动连接新房间..)
有人能解释这种行为吗?已解决: 问题是我扩展了rooms对象,但添加了owner属性:
io.sockets.adapter.rooms[socket.id].owner = socket.username;
这样扩展的房间就不能被移除了。我找到的解决方案是将owner属性存储在关联数组的外部,就是这样