我有一个NodeJS应用程序,使用服务器发送事件(SSE)路由将来自服务器的更新发送到客户端。在我的本地开发环境中,这非常好用,因为客户端始终保持连接到SSE路由,并在断开连接时立即尝试重新连接。
然而,一旦我将我的应用部署到Heroku上,一切都变得混乱了。在SSE路由上没有发送任何数据几秒钟后,客户端就会收到503 Service Unavailable
错误并且由于无法接收到任何实时更新,客户端就会失去与服务器的连接。查看Heroku服务器日志,我发现它给我一个H12 Request Timeout
错误。
进一步调查后,我找到了Heroku网站上关于长轮询和流响应的文章:
如果您正在发送流式响应(例如使用服务器发送的事件),则需要检测客户端何时挂起,并确保您的应用程序服务器及时关闭连接。如果服务器未发送任何数据而保持连接55秒,则会出现请求超时。
然而,它没有提及如何解决这个问题。
- 是否有办法将超时时间设置为无限?
- 或者这是否意味着我必须从我的服务器不断向客户端发送心跳以保持SSE路由连接活动状态?这似乎很繁琐和不必要,因为我想始终保持连接。