在socket.io中创建过多的文件室是否有问题?

在socket.io中创建过多的文件室是否有问题?,socket.io,Socket.io,我正在考虑为每个根据用户id进行连接的用户留出一个空间。这样做会不会遇到内存问题?或者,当房间中所有连接的客户端都消失时,房间会消失吗?socket.io中的房间只是一个Javascript对象,其中包含一个套接字列表。一个房间只要有插座就存在。一旦房间中的最后一个插座断开或离开房间,房间对象本身就会被移除 如果您没有意识到,socket.io已经基于socket.id值为每个用户创建了一个房间。所以,这已经存在了 我这样做会不会遇到内存问题 文件室不是一个大的数据结构,当其中没有套接字时,它们

我正在考虑为每个根据用户id进行连接的用户留出一个空间。这样做会不会遇到内存问题?或者,当房间中所有连接的客户端都消失时,房间会消失吗?

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
,如果是,则会删除文件室对象。

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
,如果是,则会删除房间对象