Время ожидания запроса Heroku H12 для маршрута отправленных событий сервера (SSE) - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть приложение NodeJS, которое использует маршрут Server Sent Events (SSE) для отправки обновлений с сервера на клиент. В моей локальной среде разработки это прекрасно работает, так как клиент все время остается подключенным к маршруту SSE и пытается немедленно восстановить соединение, если он отключен.

Однако, как только я развернул свое приложение в Heroku, все прошло наперекосяк. В течение нескольких секунд после того, как я не отправляю данные по маршруту SSE, я получаю ошибку 503 Service Unavailable на стороне клиента, и клиент теряет соединение с сервером, из-за чего он не может получать больше обновлений в реальном времени. Просматривая журналы сервера Heroku, он выдавал ошибку H12 Request Timeout.

В некоторых дальнейших исследованиях я обнаружил эту статью на веб-сайте Heroku:

Если вы отправляете потоковый ответ, например, на события, отправленные сервером, вам необходимо определить, когда клиент повесил трубку, и убедиться, что сервер приложений быстро закрывает соединение. Если сервер сохраняет соединение открытым в течение 55 секунд без отправки каких-либо данных, вы увидите тайм-аут запроса.

Однако в нем не указано, как решить проблему.

  1. Есть ли способ установить тайм-аут на бесконечность?
  2. Или это означает, что я должен продолжать посылать тактовые импульсы с моего сервера на клиент, чтобы поддерживать соединение с маршрутом SSE? Это кажется утомительным и ненужным, поскольку я хочу постоянно поддерживать соединение.

1 Ответ

1 голос
/ 07 февраля 2020

Получено от Heroku:

У меня есть sh У меня были для вас лучшие новости, но, к сожалению, вы ничего не можете сделать, чтобы избежать этого, кроме отправки пинга в течение каждых 55 секунд, чтобы сохранить SSE постоянно.

Heartbeat - единственный способ сохранить маршрут SSE с Heroku, к сожалению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...