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

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

Начните с бюджета операции

Используйте документированный общий срок клиента или механизм отмены, если он есть, вместе с ограничениями этапов. HTTPX разделяет ожидания пула, соединения, чтения и записи. Requests указывает, что его тайм-аут не является ограничением полной загрузки. curl предоставляет тайм-аут общего переноса.

Например, задача на двадцать секунд тратит две секунды в очереди, три на построение маршрута и шесть на неудачный обмен. У следующей попытки остаётся около девяти секунд. Выдавать каждому повтору свежие двадцать секунд означало бы выбросить исходный бюджет.

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

Включите тело и очистку

Метод, возвращающийся после заголовков, может оставить чтение тела за пределами своего срока. Решите, покрывает ли бюджет установку, полную конечную загрузку или долгоживущий поток с отдельными правилами живости. Современный пример .NET для отмены заголовков и тела несёт один токен через оба этапа.

Оставьте время на закрытие ответов и завершение отмены до того, как следующая попытка займёт ёмкость пула. Записывайте неудачный этап и прошедшее время; повторные чтения с прогрессом могут удовлетворять ограничениям бездействия, пока вся задача длится слишком долго.

Срок шлюза в сторону вышестоящего узла принадлежит этому шлюзу. После возврата 504 неиспользованный бюджет клиента не может продлить завершённую попытку. Держите каждый таймер привязанным к его владельцу, решая, какую настройку нужно исправить.

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