【问题标题】:How to avoid request timeout on heroku?如何避免heroku上的请求超时?
【发布时间】:2020-11-16 15:08:41
【问题描述】:

如果没有响应,我需要强制我的 express.js 应用程序在给定的时间后“中止”,以避免导致我的测功机崩溃的 heroku H12 超时(需要手动重启)。

我尝试添加 req.setTimeout(15000) ,但它只能在本地工作。在 heroku 上,我的请求继续等待超过 15 秒限制的响应,一旦达到 heroku 30 秒限制,dyno 就会崩溃。

有什么建议吗?

【问题讨论】:

  • 应用的目的是什么?它是网站还是诸如脚本或机器人之类的工作人员?
  • 这主要是一个api
  • 考虑排队任务往往需要很长时间,并使用单独的工作人员测功机层来处理队列作业(没有时间限制)。

标签: node.js express heroku


【解决方案1】:

您可以尝试使用 express timeout 中间件来使请求超时:

npm install connect-timeout
const timeout = require('connect-timeout')
app.use(timeout('15s'))

欲了解更多信息:http://expressjs.com/en/resources/middleware/timeout.html

【讨论】:

  • 它似乎不起作用。 30 秒后我的测功机仍然崩溃。
  • 你应该把你的任务移到后台,这往往需要很长时间。你可以添加工人测功机来执行长任务,因为 Heroku 网络测功机有 30 秒的限制。
【解决方案2】:

您无法配置超时。如果您的应用完成其工作的时间超过 30 秒,则会调用超时。

为避免这种情况,您应该在 30 秒内发送一些响应。您可以通过创建背景测功机来实现它

关注本文档了解更多详情

https://devcenter.heroku.com/articles/request-timeout

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 2020-06-20
    • 2011-11-27
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多