node.js - 多个 Web dyno 在实时 socket.io Node.js 应用程序中有意义吗?

标签 node.js heroku socket.io load-balancing dyno

我正在为heroku 上的实时聊天应用程序开发一个node.js 后端。当我研究 dynos 以及扩展 Node.js 后端的方法时,我可以看到 dynos 在 http 服务器上的优势,因为每个 dynos 可以独立于其他 dynos(这在大多数情况下是可以的)。

我的问题是:如何扩展和处理实时 socket.io 应用程序的负载平衡?从我读到的内容来看,测功机是“沙盒”的容器:每个测功机运行自己的进程,独立于其他测功机。那么处理这个问题的最佳方法是什么?

我正在考虑一个解决方案,但它一点也不优雅或漂亮:

我可以有多个包含 cron 的后台作业,这些作业可以检查该实例上连接的用户的新消息..但我认为必须有更好的解决方案。

最佳答案

这个问题可以概括为如何让多个 Node 进程共享数据,无论它们位于相同还是不同的服务器上。据我所知,传统观点是让所有进程使用通用数据库(Postgres、Mongo、Redis)读取和写入数据。只需使用适合您需求的正确数据库即可。

另一个选项类似于 MessengerJS它允许进程间通信。我不知道这对于您的应用程序来说是否是一个好主意,因为这样您的所有测功机最终都会包含聊天数据的副本。然后,您需要确保测功机之间的所有内容都同步且一致。我更倾向于将数据库作为单一事实来源。

关于node.js - 多个 Web dyno 在实时 socket.io Node.js 应用程序中有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28554980/

相关文章:

node.js - 如何在 Node 中的mongodb上更新后获取结果数组数据?

javascript - 我收到错误 "return binding.PBKDF2(password, salt, iterations, keylen, callback); ^ TypeError: Not a buffer"

javascript - 我将如何创建一个简单的 socket.IO 聊天?

ruby-on-rails - 在 Heroku 上使用 Prawn

heroku - 无法为 Spring Boot 应用程序解析 Heroku 上的类

javascript - Socket.io 发送时间不一致

python - 我怎样才能停止PythonShell

ruby-on-rails - Rails 应用程序在 Heroku 上崩溃,但在本地运行良好 -> "State changed from starting to crashed"

javascript - angularjs 不使用 $rootscope 和 $broadcast

javascript - 无法使用 JavaScript 关闭 WebSocket