node.js - Node.js 'ws' 和 Redis PUB/SUB 的性能推荐,用于基于房间的实时通信
问题描述
我正在开发一个项目,客户可以加入一个房间并通过 NodeJS 上的 WebSocket 与ws
模块进行通信。每个 WebSocket 客户端都有唯一的连接 ID 和房间 ID。当新消息来自客户端时,第一个服务器获取其房间 ID 并遍历连接的ws
客户端以查找具有相同房间 ID 的人。在它向每个客户端发送消息后已经找到。对于多个节点实例,我使用 Redis PUB/SUB 将消息传递给每个实例。因为同一房间中的用户可能会连接到其他实例。因此,每个节点实例仅订阅一个称为“信号”的通道。
我对性能几乎没有疑问:
1 - 每次有新消息出现时,我不想遍历每个客户端。这就是为什么,我决定为每个连接创建 Client 对象,并根据它们的房间 ID 将它们存储在 Room 对象中。因此,当新消息到来时,它会将其发送给 Room 对象中的客户端。Room 对象也将存储在节点中。我还将在 Redis 中保留房间详细信息。你认为它比第一种方法更好吗?
2 - 目前,每个节点实例仅订阅一个名为 'signal' 的频道。我希望每个客户根据他们的房间 ID 订阅频道。多亏了这一点,它不会在每次有新消息时检查房间 ID。但我不确定当有数千个房间时会发生什么。另外,我不确定 Redis 订阅限制。您认为为每个房间 id 使用频道会使性能更好吗?
谢谢您的回答。
解决方案
推荐阅读
- r - 在 R 中计算稳健的百分位数
- google-cloud-platform - 如何在谷歌云存储中合并部分文件
- arrays - Python - 从文本中的特定位置提取单词(例如第 3 行,第二个单词)
- git - git clone with ssh url from powershell 返回“致命:无法从远程存储库读取。” 在 windows10 中
- python - 无法加载包含腌制数据的文件 - Python .npy I/O
- flutter - Flutter Web中的XMLHttpRequest错误[启用CORS AWS API网关]
- c# - 如何为许多其他对象复制和定位与子对象相同的预制件?
- java - 搜索类型 JSONPath
- php - 使用 Eloquent 获取模型子类型的实例
- python - 值不断设置为无