socket.io房间或命名空间?

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

哪一个更好,使用命名空间或使用房间function来完全隔离聊天对方?

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

有没有资源使用差异?

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

  • 在服务器端创build名称空间( io.of('/ nsp') )和房间( socket.join('room') )
  • 多个名称空间和多个房间共享相同的(WebSocket)连接
  • 服务器将通过线路消息传输给连接到/joinnsp / room的客户端,即不仅仅是客户端过滤

区别

  • 命名空间通过客户端使用io.connect(urlAndNsp) 连接到客户端 (客户端只有在服务器上已存在时才会被添加到该命名空间中)
  • 房间只能在服务器端连接 (尽pipe在服务器端创build一个API以使客户端可以直接join)
  • 名称空间可以被授权保护
  • 授权不适用于房间 ,但是可以将自定义授权添加到上述易于在服务器上创build的API,以防万一使用房间
  • 房间是名称空间的一部分 (默认为“全局”名称空间)
  • 命名空间始终植根于全局范围

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

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

后者的一个例子是一个大型的客户端应用程序,其中可能独立开发的不同模块(例如第三方)分别独立使用socket.io,被用于相同的应用程序并希望共享一个networking连接。

没有实际的基准testing,在我看来,如果你只需要在你的项目中简单的隔离区来分离和分组消息,一个是好的。

不知道这是否会回答你的问题,但引导这个答案的研究至less帮助我看得更清楚。

这是一个古老的问题,但在对这个话题做了一些研究之后,我发现接受的答案在重要的一点上是不清楚的。 根据Guillermo Rauch本人( 请参阅链接 ):虽然理论上可以在正在运行的应用程序上dynamic地创build名称空间,但您主要将它们用作应用程序的预定义单独部分。 另一方面,如果您需要创build专门的分组,以适应用户/连接组,则最好使用房间。

这取决于你想做什么。

主要的区别是房间更难实施。 您必须为每个页面的重新加载制定join房间的方法。

使用命名空间,你只需要编写var example = io.connect('http://localhost/example'); 在你的JavaScript客户端和客户端自动添加在名称空间中。

使用示例:

  • 房间:私人聊天。
  • 命名空间:页面的聊天。