node.js - 如何使带有房间的 Node.js 服务器可扩展

标签 node.js scalability load-balancing

我设计了一个 Node.JS 服务器,允许用户使用 websockets 登录、加入房间并与该房间中的其他用户交换数据。不过,我现在正在寻找一种方法来使此设置可扩展。

我花了整个下午的时间研究各种负载均衡器,例如 nginx 和 haproxy,但我仍然不知道如何组织我的设置。

最初用户可以登录并查看事件房间。使这部分具有可扩展性没什么大不了的。然而,他们可以加入一个特定的房间,此时他们需要与房间中的其他人连接到同一个 node.js 实例。这部分我很难弄清楚。

目前,我的解决方案是创建两种不同类型的 node.js 实例。一种通用类型用于处理登录和房间概览请求方法,一种房间类型用于处理多个房间。然后,通用类型会跟踪哪个特定实例负责哪个房间,并可以将正确的地址传递给用户的应用程序。

但是我对这个解决方案并不满意,所以我愿意接受建议。我知道这是一个相当模糊的问题,但我并不是在寻找确切的解决方案,而是在寻找如何组织一切的提示。

最佳答案

udidu 触及了一种可能的解决方案,但要进行扩展,您应该考虑可扩展的发布/订阅解决方案; Redis ,一个流行的数据存储,has pub/sub built in我经常使用它,效果很好。

使用 Redis(或其他系统)来帮助确保 Node.js 应用程序的每个实例都能收到有关谁在哪个房间中聊天的信息,从而消除了房间中所有用户都连接到同一 Node.js 实例的依赖关系。

Redis chat w/ PubSub

关于node.js - 如何使带有房间的 Node.js 服务器可扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070853/

相关文章:

javascript - 如何通信 Catalyst 和 Node.js

node.js - SPA 与 Deepstream.io 用于登录页面的 HTTP 身份验证

performance - 多平台社交应用开发架构

Kubernetes ingress-nginx LoadBalancer 指向云桶

ruby - 通过 node-sass 的 Symfony assetic sass 过滤器?

node.js - Firebase 函数在本地提供服务时未返回预期的环境配置

linux - (*nix) 用于构建快速且可扩展的 Web 服务的云/集群解决方案

c++ - 将操作数据存储在 memcached 中是个好主意吗?

kubernetes - MetalLB 在 Kubernetes 中的工作原理

database - Kamailio:如何根据 IP 负载平衡多个 Asterisk 服务器之间的调用