socket.io房间或命名空间?

node.js Node.js

神乐

2020-03-24

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

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

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

资源使用方面有区别吗?

第3533篇《socket.io房间或命名空间?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

3个回答
十三 2020.03.24

房间和名称空间可分割通信并将单个套接字分组。

广播到房间或命名空间将不会仅覆盖成员。

命名空间和房间之间的区别如下:

  • 命名空间:在前端进行管理,这意味着用户或攻击者通过前端加入,并在此处管理加入和断开连接。
  • 房间:在后端管理,这意味着服务器分配加入房间和离开房间。

区别主要在于谁来管理

要决定使用什么,必须决定是在前端还是在后端管理细分

MandySam伽罗 2020.03.24

这是一个古老的问题,但是在对该主题进行了一些研究之后,我发现在一个重要的点上尚不清楚接受的答案。根据Guillermo Rauch本人(请参阅链接):尽管理论上可以在正在运行的应用程序上动态创建名称空间,但是您主要将它们用作应用程序的预定义独立部分。另一方面,如果您需要即时创建临时隔间以容纳用户/连接组,则最好使用房间。

西门 2020.03.24

命名空间允许您创建具有相同名称的对象,但是它们将是分开的,因为它们将位于不同的命名空间中,否则称为作用域。

这与Socket.IO名称空间应具有的思维过程相同。如果要构建模块化的Node Web应用程序,则需要对不同的模块进行命名空间。如果回头看我们的命名空间代码,您将看到我们能够在不同的命名空间中侦听相同的确切事件。在Socket.IO中,默认连接上的连接事件和/ xxx名称空间上的连接事件是不同的。例如,如果您的站点上有一个聊天和评论系统,并且希望两者都是实时的,则可以为每个空间命名。这使您可以构建仅存在于其自身上下文中的整个Socket.IO应用程序。

如果您要构建要打包和安装的东西,这也将是正确的。您无法知道某人是否已经在默认名称空间中使用某些事件,因此您应该创建自己的事件并在其中侦听。这样一来,您就不会再踩任何使用您的软件包的开发人员的脚步了。

命名空间使我们能够将连接扩展到不同的上下文中。我们可以将其与房间进行比较,从而可以将连接分组在一起。然后,我们也可以将相同的连接加入其他房间。

命名空间使您可以创建供Socket.IO使用的不同上下文。房间使您可以在这些上下文内对客户端连接进行分组。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android