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

Выбирайте политику в зависимости от нагрузки. Конечному архиву нужен бюджет завершения; поток событий может законно продолжаться часами и временами молчать.

Измеряйте полезный прогресс

Для загрузки файла сохраняйте общий срок и учитывайте поддерживаемые клиентом элементы управления низкой скоростью или прогрессом. Определите интервал и объём полезных данных. Байт сердцебиения может показывать активность, не давая реального прогресса к завершению файла.

Держите настройку туннеля отдельно от передачи тела. Ожидание завершения CONNECT и получение медленного тела назначения — разные этапы с разными доказательствами.

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

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

Похожие статьи