【问题标题】:How rooms work on socket.io?房间如何在 socket.io 上工作?
【发布时间】:2017-05-22 23:10:07
【问题描述】:

我已经阅读了 socket.io 文档,但它很糟糕。 我有几个这样的问题:

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

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

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

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

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

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

    例如:

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

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

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

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

    是的,房间空了时会释放内存。

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

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

    【讨论】:

      猜你喜欢
      • 2016-09-21
      • 2018-08-08
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 2016-07-21
      相关资源
      最近更新 更多