首页 > 解决方案 > 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 使用频道会使性能更好吗?

谢谢您的回答。

标签: node.jswebsocketredischatws

解决方案


推荐阅读