У меня есть приложение NodeJS, которое использует маршрут Server Sent Events (SSE) для отправки обновлений с сервера на клиент. В моей локальной среде разработки это прекрасно работает, так как клиент все время остается подключенным к маршруту SSE и пытается немедленно восстановить соединение, если он отключен.
Однако, как только я развернул свое приложение в Heroku, все прошло наперекосяк. В течение нескольких секунд после того, как я не отправляю данные по маршруту SSE, я получаю ошибку 503 Service Unavailable
на стороне клиента, и клиент теряет соединение с сервером, из-за чего он не может получать больше обновлений в реальном времени. Просматривая журналы сервера Heroku, он выдавал ошибку H12 Request Timeout
.
В некоторых дальнейших исследованиях я обнаружил эту статью на веб-сайте Heroku:
Если вы отправляете потоковый ответ, например, на события, отправленные сервером, вам необходимо определить, когда клиент повесил трубку, и убедиться, что сервер приложений быстро закрывает соединение. Если сервер сохраняет соединение открытым в течение 55 секунд без отправки каких-либо данных, вы увидите тайм-аут запроса.
Однако в нем не указано, как решить проблему.
- Есть ли способ установить тайм-аут на бесконечность?
- Или это означает, что я должен продолжать посылать тактовые импульсы с моего сервера на клиент, чтобы поддерживать соединение с маршрутом SSE? Это кажется утомительным и ненужным, поскольку я хочу постоянно поддерживать соединение.