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

Heroku H12 Request Timeout for Server Sent Events (SSE) Route

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

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

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

If you’re sending a streaming response, such as with server-sent events, you’ll need to detect when the client has hung up, and make sure your app server closes the connection promptly. If the server keeps the connection open for 55 seconds without sending any data, you’ll see a request timeout.

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

  1. 有没有办法将超时设置为无穷大?
  2. 或者这是否意味着我必须不断从服务器向客户端发送心跳以保持 SSE 路由连接处于活动状态?这看起来既乏味又不必要,因为我想一直保持连接。

从 Heroku 收到:

I wish I had better news for you but unfortunately, there's nothing you can do to avoid this other than sending a ping within every 55 seconds to keep the SSE persistent.

不幸的是,Heartbeat 是使 SSE 路由与 Heroku 保持连接的唯一方法。