小编典典

socket.io 房间或命名空间?

all

我正在调查 nodejs/socket.io 的实时聊天,我需要一些关于实施房间的建议。

哪个更好,使用命名空间或使用房间功能将聊天者完全隔离开来?

房间和命名空间之间真正的技术区别是什么?

是否有任何资源使用差异?


阅读 150

收藏
2022-08-02

共1个答案

小编典典

这是命名空间和房间 的共同点 (socket.io v0.9.8 - 请注意 v1.0 涉及完全重写,所以事情可能已经改变):

  • 命名空间(io.of(‘/nsp’))和房间(socket.join(‘room’)都是在服务器端创建的
  • 多个命名空间和多个房间 共享同一个 (WebSocket) 连接
  • 服务器将 仅通过线路将消息传输到 连接到/加入 nsp / 房间的那些客户端,即它不仅仅是客户端过滤

区别 :_

  • 命名空间由客户端 使用连接io.connect(urlAndNsp)(仅当客户端已经存在于服务器上时,客户端才会被添加到该命名空间)
  • 房间只能在服务器端加入 (尽管在服务器端创建 API 以使客户端加入很简单)
  • 命名空间可以受 授权保护
  • 房间没有授权 ,但可以将自定义授权添加到前面提到的服务器上易于创建的 API,以防一心想要使用房间
  • 房间是命名空间的一部分 (默认为“全局”命名空间)
  • 命名空间始终植根于全局范围

为了不将概念与名称(房间或命名空间)混淆,我将使用 隔间 来指代概念,而其他两个名称则用于概念的 实现 。所以如果你

  • 需要 每个隔间的授权 ,命名空间可能是最简单的途径
  • 如果您想要 分层的隔间 (最多 2 层),请使用命名空间/房间组合
  • 如果您的客户端应用程序包含不同的部分(它们本身并不关心隔间,但)需要彼此分离,请使用命名空间。

后者的一个例子是一个大型客户端应用程序,其中不同的模块,可能是单独开发的(例如第三方),每个单独使用
socket.io,正在同一个应用程序中使用,并希望共享一个网络连接。

实际上并没有对此进行基准测试,在我看来,如果您只需要在项目中使用简单的隔间来分隔和分组消息,那么任何一个都可以。

不确定这是否回答了你的问题,但导致这个答案的研究至少让我看得更清楚。

2022-08-02