这是名称空间和房间 的共同点 (socket.io v0.9.8-请注意,v1.0涉及完整的重写,因此情况可能有所更改):
- 命名空间(io.of(’/ nsp’))和房间(socket.join(’room’)) 都是在服务器端创建的
- 多个名称空间和多个房间 共享相同的(WebSocket)连接
- 服务器将 仅通过有线方式 将 消息传输到 连接到/加入了nsp / room的 那些客户端 ,即不仅仅是客户端筛选
的 差异 :
- 客户端 使用 以下方式连接
io.connect(urlAndNsp)
名称空间(仅当客户端已经存在于服务器上时,客户端才会添加到该名称空间中) - 房间只能在服务器端加入 (尽管 在服务器端 创建API以允许客户端加入很简单)
- 命名空间可以受 授权保护
- 房间不能使用授权 ,但是可以将自定义授权添加到服务器上上述易于创建的API中,以防万一使用房间
- 房间是名称空间的一部分 (默认为“全局”名称空间)
- 名称空间始终植根于全局范围
为了不使概念与名称(房间或名称空间)混淆,我将使用 隔离专区 来引用该概念,并使用其他两个名称来表示该概念的 实现 。所以如果你
- 需要 每个隔间的授权 ,名称空间可能是最简单的方法
- 如果要 分层放置隔层 (最多2层),请使用名称空间/房间组合
- 如果您的客户端应用程序由不同部分组成(它们本身并不关心隔离专区,但需要彼此分开),请使用名称空间。
后者的示例是一个大型客户端应用程序,其中可能分别开发(例如,第三方)的不同模块(每个模块分别使用socket.io)正在同一应用程序中使用,并希望共享一个网络连接。
在我尚未真正进行基准测试的情况下,在我看来,如果您只需要在项目中使用简单的隔离专区来分隔和分组消息,则任何一种都可以。
不确定是否能回答您的问题,但是导致该问题的研究至少帮助我更清楚了。



