我有一个NodeJS应用程序,它使用服务器发送事件(SSE)路由将更新从服务器发送到客户端。在我的本地开发环境中,这非常有效,因为客户端始终保持与SSE路由的连接,并在断开连接后立即尝试重新连接。
但是,一旦我将应用程序部署到Heroku后,一切都变了。在没有通过SSE路由发送任何数据的几秒钟之内,我在客户端收到了503 Service Unavailable
错误,并且客户端失去了与服务器的连接,由于它无法接收更多实时更新。查看Heroku服务器日志,它给我一个H12 Request Timeout
错误。
在进一步研究中,我在Heroku网站上看到了this条文章:
如果您正在发送流式响应,例如通过服务器发送 事件,您需要检测客户端何时挂断,并进行 确保您的应用服务器立即关闭连接。如果服务器 在不发送任何数据的情况下使连接保持打开状态55秒钟, 您会看到请求超时。
但是,它没有提到如何解决该问题。
答案 0 :(得分:2)
从Heroku收到此消息:
我希望我对你有个好消息,但不幸的是,什么都没有 您可以避免这种情况,除了每55分钟发送一次ping 保持SSE持续的秒数。
不幸的是,心跳是使Heroku保持SSE路线存活的唯一方法。