2016-12-28 83 views

回答

3

socket.io中的一个房间只是一个带有套接字列表的Javascript对象。一个房间只要有一个插座就存在。只要房间中的最后一个插座断开连接或离开房间,房间物体本身就会被移除。

如果您没有意识到,socket.io已经根据socket.id值为每个用户创建了一个空间。所以,这已经存在。

我会遇到内存问题这样做吗?

房间并不是一个大型的数据结构,当它们没有套接字时它们会自动清理,所以我不希望你在房间中遇到内存问题。

或者当该房间中的所有连接客户端都消失后,房间是否会消失?

是,一间将在所有在 室连接的客户端都没有了释放。

房间存储在适配器对象中(允许通过redis支持跨多个服务器的分布式房间的架构),因此socket.leave(room)方法最终告诉适配器从房间中移除套接字。适配器代码如下所示:

Adapter.prototype.del = function(id, room, fn){ 
    this.sids[id] = this.sids[id] || {}; 
    delete this.sids[id][room]; 
    if (this.rooms.hasOwnProperty(room)) { 
    this.rooms[room].del(id); 
    if (this.rooms[room].length === 0) delete this.rooms[room]; 
    } 

    if (fn) process.nextTick(fn.bind(null, null)); 
}; 

你可以看到有,经过插座已经从房间取出,代码检查,看看当前长度为0,如果是的话,它删除了房间对象。

相关问题