一尘不染

socket.io房间或命名空间?

node.js

我正在研究nodejs / socket.io的实时聊天,并且需要一些有关实施会议室的建议。

使用名称空间或使用房间功能来完全隔离颤抖的对方,哪个更好?

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

资源使用方面有区别吗?


阅读 245

收藏
2020-07-07

共1个答案

一尘不染

这是名称空间和房间 的共同点 (socket.io v0.9.8-请注意,v1.0涉及完整的重写,因此情况可能有所更改):

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

差异

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

为了不使概念与名称(房间或名称空间)混淆,我将使用 隔离专区 来引用该概念,并使用其他两个名称来表示该概念的 实现 。所以如果你

  • 需要 每个隔间的授权 ,名称空间可能是最简单的方法
  • 如果要 分层放置隔层 (最多2层),请使用名称空间/房间组合
  • 如果您的客户端应用程序由不同部分组成(它们本身并不关心隔离专区,但需要彼此分开),请使用名称空间。

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

在我尚未真正进行基准测试的情况下,在我看来,如果您只需要在项目中使用简单的隔离专区来分隔和分组消息,则任何一种都可以。

不确定是否能回答您的问题,但是导致该问题的研究至少帮助我更清楚了。

2020-07-07