【问题标题】:Node.js/Socket.io web app works flawlessly and indefinitely locally but browser hangs when on HerokuNode.js/Socket.io Web 应用程序在本地无限制地完美运行,但在 Heroku 上时浏览器挂起
【发布时间】:2013-08-23 01:27:26
【问题描述】:

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

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

【问题讨论】:

  • 我有类似的设置(nodejs/socketio/heroku/mongodb);我正在将 MongoLab 与 Heroku 一起使用,我遇到了完全相同的问题。该应用程序在本地运行良好,但在免费的 heroku dyno 上运行非常缓慢。我必须将我的套接字会话循环调整为每秒只滴答一次,因为它无法处理正常速度,并且在使用 5 分钟以上之后,它最终会无限期地挂起,直到我刷新页面。几年前我看到你发过这个。从那以后你有没有运气,或者这只是 Heroku 的问题?

标签: node.js mongodb heroku socket.io mlab


【解决方案1】:

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

如果您仍需要帮助,请发送电子邮件至 support@mongolab.com 联系我们!我们会帮助找出原因。

【讨论】:

  • 即使没有空转,我也遇到了 OP 提到的问题。它在本地运行良好,然后在我推送和使用 Heroku/MongoLab 开发 URL 时变得超级慢并报告不一致的错误(由于长时间挂起)。可能是因为我们使用的是免费帐户?但是,如果这只是服务提供商的问题,我不敢升级。
  • 当你说“它在本地运行良好”是指本地应用程序与本地 MongoDB 还是本地应用程序和 MongoLab 数据库?听起来您可以通过测试连接到 MongoLab 的本地应用程序来隔离 MongoLab 问题。也就是说,我们通常建议将您的应用程序托管在与数据库相同的数据中心,因此一个好的测试是从与 MongoLab 数据库相同的数据中心启动 AWS 实例并尝试以这种方式连接。如果您认为此设置没有问题,您可以联系 Heroku 支持团队。
  • 我已经通过完全禁用数据库排除了MongoLab,并且问题仍然存在于Heroku上,但不是本地;尽管在连接数据库时发生的频率更高。换句话说,这似乎是一个 Heroku 问题。
  • 我建议您与 Heroku 团队联系,他们可以在这里联系:help.heroku.com
猜你喜欢
  • 2014-10-24
  • 2017-07-26
  • 2014-09-18
  • 2012-01-28
  • 2016-06-19
  • 2013-09-23
  • 1970-01-01
  • 2019-05-21
  • 2023-04-08
相关资源
最近更新 更多