服务器发送事件(SSE)路由的Heroku H12请求超时

时间:2020-02-06 12:12:49

标签: node.js heroku server-sent-events

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

但是,一旦我将应用程序部署到Heroku后,一切都变了。在没有通过SSE路由发送任何数据的几秒钟之内,我在客户端收到了503 Service Unavailable错误,并且客户端失去了与服务器的连接,由于它无法接收更多实时更新。查看Heroku服务器日志,它给我一个H12 Request Timeout错误。

在进一步研究中,我在Heroku网站上看到了this条文章:

如果您正在发送流式响应,例如通过服务器发送 事件,您需要检测客户端何时挂断,并进行 确保您的应用服务器立即关闭连接。如果服务器 在不发送任何数据的情况下使连接保持打开状态55秒钟, 您会看到请求超时。

但是,它没有提到如何解决该问题。

  1. 是否可以将超时设置为无穷大?
  2. 或者这是否意味着我必须继续从服务器向客户端发送心跳信号,才能保持SSE路由连接正常运行?这似乎很乏味且不必要,因为我想一直保持连接状态。

1 个答案:

答案 0 :(得分:2)

从Heroku收到此消息:

我希望我对你有个好消息,但不幸的是,什么都没有 您可以避免这种情况,除了每55分钟发送一次ping 保持SSE持续的秒数。

不幸的是,心跳是使Heroku保持SSE路线存活的唯一方法。