房间如何在socket.io上工作?

时间:2017-05-20 09:18:37

标签: node.js socket.io

我已经读过socket.io文件,但它很差。 我有几个这样的问题:

  1. 如何为一个房间定义属性,如:room.isPlayingroom.createdDate ...
  2. 房间数据存储在哪里?在记忆中?将 没有人留在那个房间后,记忆会自动释放吗?因为如果创建的空房太多会消耗服务器内存
  3. 现在,我正在使用object来存储房间数据并处理空房间: 当没有人离开时删除。使用默认值是否相同 socket.io房间?

1 个答案:

答案 0 :(得分:1)

  

如何为一个房间定义属性,如:room.isPlaying,room.createdDate

socket.io不允许您访问每个房间的公共对象。 您可以为每个房间创建自己的对象,并将它们保存在您自己的Map对象中。因此,每当您将某人添加到某个房间时,您会看到您的地图中是否已有一个房间对象,如果没有,则创建一个房间对象。然后你可以在那个对象上保持房间状态。

  

房间数据存储在哪里?在记忆中?没有人留在那个房间后,记忆会自动释放吗?因为如果有太多空房间创建将消耗服务器内存

socket.io拥有自己的状态信息,可以跟踪给定房间中的连接。它没有记录该状态,但您可以在调试器中研究源代码或研究状态,并找到所有内容的存储位置。

例如:

io.nsps['/'].adapter.rooms

是一个对象,其属性是/命名空间中所有活动房间的列表。  或者,您可以使用它来获取所有活动房间的数组:

Object.keys(io.nsps['/'].adapter.rooms)
  

在没有人离开那个房间后,记忆会自动释放吗?因为如果有太多空房间创建将消耗服务器内存

是的,当房间空了时,将释放记忆。

  

现在,我正在使用对象来存储房间数据并处理空房间:当没有人离开时删除。使用默认的socket.io房间是否一样?

socket.io将数据保存在内存中。当房间变空时,它会清理干净。