我设计了一个 Node.JS 服务器,允许用户使用 websockets 登录、加入房间并与该房间中的其他用户交换数据。不过,我现在正在寻找一种方法来使此设置可扩展。
我花了整个下午的时间研究各种负载均衡器,例如 nginx 和 haproxy,但我仍然不知道如何组织我的设置。
最初用户可以登录并查看事件房间。使这部分具有可扩展性没什么大不了的。然而,他们可以加入一个特定的房间,此时他们需要与房间中的其他人连接到同一个 node.js 实例。这部分我很难弄清楚。
目前,我的解决方案是创建两种不同类型的 node.js 实例。一种通用类型用于处理登录和房间概览请求方法,一种房间类型用于处理多个房间。然后,通用类型会跟踪哪个特定实例负责哪个房间,并可以将正确的地址传递给用户的应用程序。
但是我对这个解决方案并不满意,所以我愿意接受建议。我知道这是一个相当模糊的问题,但我并不是在寻找确切的解决方案,而是在寻找如何组织一切的提示。
最佳答案
udidu 触及了一种可能的解决方案,但要进行扩展,您应该考虑可扩展的发布/订阅解决方案; Redis ,一个流行的数据存储,has pub/sub built in我经常使用它,效果很好。
使用 Redis(或其他系统)来帮助确保 Node.js 应用程序的每个实例都能收到有关谁在哪个房间中聊天的信息,从而消除了房间中所有用户都连接到同一 Node.js 实例的依赖关系。
关于node.js - 如何使带有房间的 Node.js 服务器可扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070853/