我正在研究 nodejs/socket.io 实时聊天,我需要一些实现房间的建议。
使用名称空间或使用房间特性来完全隔离各组聊天内容,哪一个更好?
房间和名称空间之间真正的技术区别是什么?
资源使用是否有差异?
这取决于你想做什么。
主要区别是 房间更难实现。 你必须制定一个方法来连接每个页面重新加载的房间。
对于 命名空间,您只需要在 Javascript 客户端中编写 var example = io.connect('http://localhost/example');,客户端就会自动添加到名称空间中。
var example = io.connect('http://localhost/example');
使用范例:
这就是名称空间和房间所拥有的 共同点(socket.io v0.9.8-请注意,v1.0涉及到一个完整的重写,所以事情可能已经发生了变化) :
返回文章页面 分歧:
io.connect(urlAndNsp)
为了避免将这个概念与名称(房间或名称空间)混淆,我将使用 隔间来引用这个概念,并使用其他两个名称来表示这个概念的 实施。所以如果你
后者的一个例子是一个大型客户端应用程序,其中不同的模块,也许是分开开发的(例如第三方) ,每个都使用 socket.io 独立,正在同一个应用程序中使用,并希望共享一个网络连接。
在我看来,如果您只是需要在项目中使用简单的隔间来分离和分组消息,那么没有实际的基准测试,任何一个都可以。
不确定这是否回答了你的问题,但是这个答案的研究至少帮助我看得更清楚了。
这是一个古老的问题,但是在对这个主题做了一些研究之后,我发现公认的答案在一个重要的问题上并不明确。根据吉列尔莫 · 劳赫本人(看链接) : 虽然理论上可以在运行中的应用程序上动态创建名称空间,但主要是将它们用作应用程序的预定义的单独部分。另一方面,如果您需要在运行中创建临时隔间来容纳用户/连接组,那么最好使用房间。
房间和命名空间对通信进行分段,并对单个套接字进行分组。
向房间或名称空间的广播不会只传递给所有成员。
名称空间和房间之间的区别如下:
区别主要在于谁来管理它们
为了决定使用什么,您必须决定分段应该在前端还是在后端管理
名称空间允许您创建具有相同名称的对象,但是它们将是独立的,因为它们将存在于不同的名称空间(也称为作用域)中。
对于 Socket.IO 名称空间,应该有相同的思考过程。如果您正在构建一个模块化的 Node Web 应用程序,那么您将希望将不同的模块命名为命名空间。如果您回头看看我们的名称空间代码,您将看到我们能够在不同的名称空间中侦听相同的事件。在 Socket.IO 中,默认连接上的连接事件和/xxx 名称空间上的连接事件是不同的。例如,如果您的站点上有一个聊天和评论系统,并希望两者都是实时的,那么可以分别使用名称空间。这允许您构建一个完整的 Socket.IO 应用程序,该应用程序只存在于它自己的上下文中。
如果您正在构建要打包和安装的内容,那么这也是正确的。您无法知道是否有人已经在默认名称空间中使用了某些事件,因此应该创建自己的事件并在那里侦听。这使您不必冒犯任何使用您的软件包的开发人员。
名称空间允许我们将连接划分到不同的上下文中。我们可以将其与房间进行比较,后者允许我们将连接分组在一起,然后我们也可以将相同的连接连接到其他房间。
名称空间允许您为 Socket.IO 创建不同的上下文。房间允许您在这些上下文中对客户端连接进行分组。
名称空间中可以有房间,这有助于组织代码,但是房间中不能有名称空间。因此,名称空间是一个顶级细分和房间是一个较低的水平之一。