Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 所有人离开后,房间不会被搬走_Node.js_Socket.io - Fatal编程技术网

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属性存储在关联数组的外部,就是这样