Экспресс таймаут всегда происходит через 1 минуту - PullRequest
0 голосов
/ 15 мая 2018

У меня есть экспресс-сервер, который истекает через 1 минуту после публикации в Cloud Foundry. Локально я могу установить любой тайм-аут, какой захочу. Вероятно, это проблема с Pivotal Cloud Foundry, но я не уверен, какие настройки могут привести к поломке. Вот что я попробовал в коде:

https://nodejs.org/dist/latest-v8.x/docs/api/http.html#http_server_settimeout_msecs_callback

https://nodejs.org/dist/latest-v8.x/docs/api/http.html#http_server_timeout

https://github.com/expressjs/timeout

https://github.com/expressjs/express/issues/2174

Тогда просто для удовольствия я поместил их все в свой код, и он все еще истекает через 1 минуту. Вот грубый ответ, который я получаю:

HTTP/1.1 504 GATEWAY_TIMEOUT
Content-Length: 0
Connection: keep-alive

Я думаю, что есть какая-то конфигурация сервера Linux, которую, возможно, мне придется установить. Есть ли на узле что-нибудь, что могло бы жестко ограничить продолжительность соединения? Что заставило бы это послать тот ответ? В моем коде нет ничего, что отправило бы 504 GATEWAY_TIMEOUT. Локально, когда я устанавливаю 1 минуту, я даже не получаю такой ответ. Я получаю:

Empty reply from server

Это нормально. Любые предложения приветствуются.

-------------------- UPDATE --------------------

GoRouter, о котором говорил Франциско Матео, действительно является проблемой, но согласно поддержке Pivotal:

Чтобы изменить время ожидания на роутере, вам нужно изменить манифест BOSH роутера. В полной среде Pivotal Cloud Foundry это тривиальное изменение. Однако мы не разрешаем вносить такие изменения в Pivotal Web Services, поскольку они затронут более одного клиента.

Очевидно, что невозможно перегрузить его, но я могу сохранить соединение, если время от времени отправляю данные. Поэтому, если я отправляю пустое место каждые 10 секунд, я могу поддерживать связь вечно. Это ужасно, хотя. В ответе будет множество пустых мест, а затем будут показаны данные.

Следующий вопрос:

Можно ли отправить пинг без данных?

Я попытался отправить пустую строку, но Go Router видит, что это ничего не отправляет. Может быть, пустой символ?

1 Ответ

0 голосов
/ 15 мая 2018

Это не имеет никакого отношения к Node или вашему приложению Express. Это связано с тем, что gorouter, который использует Cloud Foundry, устанавливает время ожидания 60 секунд.

См:

Может быть способ переопределить его: https://docs.cloudfoundry.org/services/route-services.html#timeouts

...