Heroku H12请求超时问题解决方案-针对服务器发送事件(SSE)路由

3

我有一个NodeJS应用程序,使用服务器发送事件(SSE)路由将来自服务器的更新发送到客户端。在我的本地开发环境中,这非常好用,因为客户端始终保持连接到SSE路由,并在断开连接时立即尝试重新连接。

然而,一旦我将我的应用部署到Heroku上,一切都变得混乱了。在SSE路由上没有发送任何数据几秒钟后,客户端就会收到503 Service Unavailable错误并且由于无法接收到任何实时更新,客户端就会失去与服务器的连接。查看Heroku服务器日志,我发现它给我一个H12 Request Timeout错误。

进一步调查后,我找到了Heroku网站上关于长轮询和流响应的文章:

如果您正在发送流式响应(例如使用服务器发送的事件),则需要检测客户端何时挂起,并确保您的应用程序服务器及时关闭连接。如果服务器未发送任何数据而保持连接55秒,则会出现请求超时。

然而,它没有提及如何解决这个问题。

  1. 是否有办法将超时时间设置为无限?
  2. 或者这是否意味着我必须从我的服务器不断向客户端发送心跳以保持SSE路由连接活动状态?这似乎很繁琐和不必要,因为我想始终保持连接。
1个回答

6

我收到了Heroku的消息:

很抱歉,我没有更好的消息要告诉你,但是除了每55秒发送一次ping以保持SSE持久性外,你无法避免这种情况。

不幸的是,心跳是唯一可以使SSE路由在Heroku上保持活动状态的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接