Node.js/Socket.io 网络应用程序在本地完美且无限期地工作,但浏览器在 Heroku 上挂起

标签 node.js mongodb heroku socket.io mlab

我有一个 Node.js 网络应用程序,它定期对 MongoDB 后端进行 socket.io 调用(每 30 分钟一次)。我可以让它在本地运行几天没问题。我最近刚刚部署到 Heroku(免费,1 个 Dyno,使用 MongoLab for DB)并且一切都启动并且工作正常。然而,当更新开始推出时,我在浏览器控制台中收到许多错误,表明更新并没有完全正确,最终(大约 3 或 4 个更新)并且总是,选项卡卡在 30% CPU 和800MB RAM(当它通常具有标称 CPU 和最多约 300-400MB RAM 时)。

我使用一串 promise 来确保异步数据库更新步骤以完美的顺序发生,并且它们总是在本地发生。但是 console.logs 表明该应用程序运行不正常,而这应该是不可能的,即该应用程序在它依赖的 promise 解决之前继续运行。这将解释所有错误(例如 undefined variable 等)有没有人在他们的应用程序中看到过类似的东西,可以建议从哪里开始寻找解决方案?就像我看到的大多数故障排除问题一样,这不是部署应用程序或在 Heroku 上启动应用程序的问题。该应用程序运行,附加到端口并出现在浏览器中,没有错误。只有在运行了一段时间之后,事情才变得乱七八糟。我很茫然。

最佳答案

没有看到连接代码和错误就很难判断,但最初想到的是设置 connectTimeoutMS 和 socketTimeoutMS 选项(通常我们建议 30 秒,或 30000)。我们已经看到一些问题,配置超时对连接到 Heroku 有很大帮助——尤其是在空闲之后。

如果您仍然需要帮助,请写信给我们 support@mongolab.com!我们会帮助找到原因。

关于Node.js/Socket.io 网络应用程序在本地完美且无限期地工作,但浏览器在 Heroku 上挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240761/

相关文章:

javascript - 从 node.js 中的平面数组构建树数组

node.js - 持续服务器端 Firebase 监控的方法(Web 应用程序)

javascript - 使用此 JWT 库检查 token 是否已过期

mongodb - 在 vanilla GraphQL 中实现分页

mongodb - 如何从 MongoDB 文档中完全删除字段?

ssl - Heroku ssl 证书未与自定义域切换

javascript - 执行在await Promise.all后停止

javascript - 为什么我会收到这个已弃用的警告?! MongoDB

ruby-on-rails - 在 ruby​​ on rails 中将 sqlite 更改为 PostgreSQL

python - Docker 在 Heroku 中部署错误 - 权限被拒绝