Node.js的Heroku H12超时错误

Car*_*oza 1 api timeout heroku node.js hapijs

目前,我正在使用Node hapijs框架开发REST API .API部署在Heroku上.

API中有一个GET端点,它发出get请求以从第三方检索数据并在发送回复之前处理数据.此特定端点不时超时.当端点超时时,Heroku返回H12错误.一旦超时,对该端点的后续请求将导致H12错误.我必须重新启动Heroku上的应用程序才能使该端点再次运行.API中的任何其他端点都不会受到此错误的任何影响,即使发生错误,也可以继续正常工作.

在我的调试过程中并查看日志,似乎有时候没有从第三方API返回响应,从而导致错误.

我尝试了以下解决方案来尝试解决问题:

  1. 我正在使用请求库来发出请求.因此,我尝试将超时设置为5000毫秒,作为传递给请求的选项的一部分.它有时工作...触发超时并且端点发送与请求关联的超时错误.这是我想要的行为,因为后续的端点请求工作.但是,有时候不会触发请求超时,但Heroku仍然会返回H12错误(总是在30秒后,默认为Heroku).之后,对该端点的后续请求将返回H12错误(也在30秒后).似乎某些进程在Heroku上"卡住",并且在我重新启动应用程序之前不会终止.

  2. 我已经尝试在hapi.js路由配置对象中添加超时.我得到与上面相同的结果.

  3. 我继续做研究,并怀疑这些问题与这里这里给出的描述有关.似乎在应用程序服务器级别设置一个可以向Heroku工作者发送SIGKILL的超时可能会起作用.在Ruby中看起来相当简单,但我找不到有关如何在Node中执行此操作的更多信息.

非常感谢任何见解.我知道向第三方发出请求时可能会发生超时.这不是问题.问题是端点似乎在超时后被"卡住"在Heroku上并且它变得没有响应.

谢谢您的帮助!

lwd*_*he1 6

我也有类似的问题,放弃了一天后,我回到了一下,发现我的错误.当服务器端发生错误时,我没有向客户端发送响应.无论服务器端算法的结果如何,都要确保返回响应.如果有错误,请返回.如果请求成功,则返回该响应.我希望有所帮助.

如果这没有帮助,请检查heroku关于处理请求超时的指南,尤其是调试请求超时部分可能有所帮助: