当前位置: 首页 > 面试题库 >

socket.io房间或命名空间?

谭曦
2023-03-14
问题内容

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

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

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

资源使用方面有区别吗?


问题答案:

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

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

差异

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

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

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

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

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

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



 类似资料:
  • 我正在研究Nodejs/socket.io实时聊天,我需要一些实现房间的建议。 哪一个更好,使用名称空间还是使用房间特性来完全隔离彼此之间的聊天? 是否存在资源使用差异?

  • 问题内容: 我有一个Node.js Web服务器,该服务器在顶部运行套接字服务器,该服务器是使用Socket.io创建的。基本上,这可行。 我现在想要实现的是将连接的客户端按组进行群集。所以可能有一些客户从而弥补了A组和其他一些客户从而弥补了B组,他们将选择哪个组由他们一adressing特定的URL,无论是属于或。 现在,在Socket.io中,我希望将消息发送到A组中的所有客户端或B组中的所有

  • 关于术语的一点说明: 请务必注意一点,TypeScript 1.5里术语名已经发生了变化。 “内部模块”现在称做“命名空间”。 “外部模块”现在则简称为“模块”,这是为了与ECMAScript 2015里的术语保持一致,(也就是说 module X { 相当于现在推荐的写法 namespace X {)。 这篇文章描述了如何在TypeScript里使用命名空间(之前叫做“内部模块”)来组织你的代码

  • Let the word of Christ dwell in you richly in all wisdom; teaching and admonishing one another in psalms and hymns and spiritual songs, singing with grrace in your hearts tto the Lord. And whatsoever

  • 客户端有许多“命名空间”,通常是一些公开的可管理功能。命名空间对应 Elasticsearch 中各种可管理的 endpoint。下面是全部的命名空间: **命名空间** **功能** `indices()` 索引数据统计和显示索引信息 `nodes()` 节点数据统计和显示节点信息 `cluster()` 集群数据统计和显示集群信息 `snapshot()` 对集群和索引进行拍摄快照或恢复数据

  • 命名空间 由于 js 环境极少命名空间管理模块, namespace 相对陌生, 比如有这样的文件结构, src/ demo/ core.cljs 可以看到 core.cljs 的路径就是: src/demo/core.cljs 注意 JVM 环境有个 classpath 的环境变量, 用于判断怎样查找源码, classpath 对应多个路径, 也可能是 jar 包, 而 jar 包中