H15 по запросу Heroku SSE

У меня есть приложение Node.js на Heroku. Недавно я переключил длинный запрос на использование SSE (EventSource). Хотя на моей машине он работает отлично и быстро, я продолжаю получать Error H15 (Idle connection) на свой запрос GET. В описании H15 говорится, что на транзакцию разрешено более 55 секунд. Но весь мой запрос занимает не более 4-5 секунд.

Кроме того, после прочтения описания я возвращаю свой первый байт (просто число) сразу после выполнения запроса, прежде чем он начнет какую-либо тяжелую работу - а он по-прежнему не работает.

Мои вопросы:

  1. Что мне нужно сделать, чтобы это дело продолжалось? Параметр заголовка HTTP? Что-то на стороне клиента JS? Как мне избежать H15?
  2. Я пытаюсь сделать что-то, что не поддерживается Heroku? Я так не думаю, поскольку у меня есть другое приложение на Heroku, которое успешно использует EventSource (express-eventsource.herokuapp.com, источник на github: https://github.com/TravelingTechGuy/express-eventsource )

Как всегда, спасибо за уделенное время.


person Traveling Tech Guy    schedule 25.10.2012    source источник


Ответы (3)


Попробовав все, изменив и переписав свой код, профилируя сеть и т. Д., Наконец, мой друг (без каких-либо знаний об узлах) пришел к идее, которая направила меня на верный путь:

Похоже, это проблема домена, а НЕ проблема кода вообще.
Я установил сопоставление ANAME, и оказалось, что, поскольку Heroku использует 5 разных IP-адресов, сопоставление только с одним из них может испортить вызов SSE. По сути, mydomain.com показал IP-адрес, отличный от mydomain.herokuapp.com - это означает, что сервер попытался вернуть ответ на IP-адрес, отличный от того, который инициировал вызов, поэтому время ожидания истекло.

Я отказался от ANAME в пользу CNAME (в основном, отказавшись от голого mydomain.com в пользу www.mydomain.com), и теперь, похоже, он работает.

Выводы:

  1. Не все является проблемой кода - если он хорошо работает в одной среде, а не в другой, это проблема конфигурации.
  2. Если вы слишком долго боретесь с чем-то, это поможет привлечь новую партию глаз. Даже не обладая знаниями в предметной области, вы получите отличные идеи для свежих подходов, которые вы можете попробовать.
  3. Управление DNS 1 и 1 - отстой, b @ lls. Переезд оттуда
person Traveling Tech Guy    schedule 29.10.2012
comment
Небольшое обновление: это действительно проблема домена. Все работает хорошо (хоть и медленно - бесплатный Heroku == медленный Heroku :)). - person Traveling Tech Guy; 31.10.2012
comment
Ах, эта проблема действительно раздражает. Не могли бы вы подробнее рассказать о переходе с ANAME на CNAME? - person Uday Reddy; 04.03.2014
comment
По сути, это означает отказ от использования «голых» доменных имен, таких как mydomain.com. В зависимости от вашего управления DNS (я использую GoDaddy) вы сможете установить поддомен (CNAME) с помощью управления DNS. Подробнее см. Здесь: devcenter.heroku.com/articles/custom-domains. - person Traveling Tech Guy; 05.03.2014
comment
Привет, @TravelingTechGuy, надеюсь, ты все еще здесь. У меня также есть проблема, связанная с маршрутом события SSE. Я получаю сообщение об ошибке code=H27 desc="Client Request Interrupted" method=GET path="/sse-route". Маршрут хорошо работает на моем локальном, но полностью перестает работать на Heroku (за исключением того, когда я впервые запускаю приложение). Это H27, а не H15. Конечно, это не совсем та же ошибка, что и у вас, но мне интересно, решит ли эту проблему использование сопоставления имен? Спасибо! - person philosopher; 10.11.2020
comment
Привет @philosopher. Я все еще рядом. Но в последнее время я в основном не пользуюсь Heroku, поэтому я не могу помочь, не проводя исследования. Извините. - person Traveling Tech Guy; 13.11.2020
comment
Что вы используете вместо - person philosopher; 13.11.2020
comment
В настоящее время Netlify для быстрого развертывания или Lightsail для более постоянного (‹5 долларов в месяц от Amazon за полный сервер). - person Traveling Tech Guy; 13.11.2020

Я столкнулся с той же проблемой с приложением Meteor. Внезапно каждое взаимодействие возвращало ошибку websocket в приложении и ошибку h15 на heroku. Я решил это, изменив корневой URL-адрес на голый домен, а затем перенаправив голый домен на www.example.com. Надеюсь, это тоже кому-то поможет. Я также полностью согласен с @TravelingTechGuy на

Не все является проблемой кода - если он хорошо работает в одной среде, а не в другой, это проблема конфигурации.

person mcnk    schedule 18.06.2017
comment
Вопрос по SSE, веб-сокеты - это совершенно другая спецификация со своим набором сложностей. - person Matt Jensen; 15.07.2018

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

person xetryDcoder    schedule 02.04.2021
comment
SSE не имеет ничего общего с базами данных. См. Правильный ответ ниже. - person Traveling Tech Guy; 03.04.2021
comment
моя вина. Я отвечал на ошибку H15 - person xetryDcoder; 07.04.2021