每个人离开后都不会删除房间

时间:2015-05-30 12:46:11

标签: node.js socket.io

到目前为止,我从文档中读到了 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.

我的问题是,关闭/刷新浏览器标签后,所有以前加入的房间仍然存在,房间数量增加(连接时套接字会自动加入新房间..)

任何人都可以解释这种行为吗?

1 个答案:

答案 0 :(得分:0)

<强>解决:

问题是我扩展了房间对象添加所有者属性:

closest()

这样就无法移除扩展的房间。我找到的解决方案是将所有者属性存储在一个关联数组中,这就是它。