Phasen-Timeouts und die Gesamtfrist einer Proxy-Anfrage
Trennen Sie Limits je Phase vom gesamten Zeitbudget einer über einen Proxy laufenden Operation, einschließlich Wiederholungen und dem Lesen der Antwort.
Verbindungs- und Lese-Timeouts begrenzen einzelne Wartezeiten. Sie begrenzen nicht zwingend eine gesamte Proxy-Operation, die auch Warten in der Warteschlange, DNS, CONNECT, TLS, Weiterleitungen, Wiederholungen und das Lesen der Antwort umfassen kann.
| Limit | Umfang |
|---|---|
| Verbindungs-Timeout | Verbindungsaufbau nach Definition des Clients |
| Lese-Inaktivitäts-Timeout | Eine Wartezeit ohne den erwarteten Datenfortschritt |
| Gesamtfrist | Zulässige Dauer der vollständigen Operation |
Beginnen Sie mit dem Budget der Operation
Nutzen Sie die dokumentierte Gesamtfrist oder den Abbruchmechanismus des Clients, wo vorhanden, zusammen mit den Phasenlimits. HTTPX trennt Wartezeiten für Pool, Verbindung, Lesen und Schreiben. Requests stellt klar, dass sein Timeout keine Grenze für einen vollständigen Download ist. curl bietet ein Gesamtübertragungs-Timeout.
Beispielsweise verbringt eine Aufgabe von zwanzig Sekunden zwei Sekunden in der Warteschlange, drei mit dem Aufbau ihrer Route und sechs mit einem erfolglosen Austausch. Für ihren nächsten Versuch bleiben etwa neun Sekunden. Jedem Wiederholungsversuch frische zwanzig Sekunden zu geben, würde das ursprüngliche Budget verwerfen.
Verwenden Sie für die Abrechnung der verstrichenen Zeit eine monotone Uhr. Führen Sie eine absolute Frist oder die verbleibende Dauer durch die Schichten, die die Arbeit besitzen. Kann ein umgebender Abbruchmechanismus den erforderlichen Umfang nicht durchsetzen, machen Sie diese Einschränkung ausdrücklich.
Beziehen Sie den Body und das Aufräumen ein
Eine Methode, die nach den Headern zurückkehrt, kann das Lesen des Bodys außerhalb ihrer Frist lassen. Entscheiden Sie, ob das Budget den Aufbau, einen ganzen endlichen Download oder einen langlebigen Stream mit eigenen Lebendigkeitsregeln abdeckt. Ein modernes .NET-Beispiel für den Abbruch von Headern und Body führt ein Token durch beide Phasen.
Lassen Sie Zeit, Antworten zu schließen und den Abbruch abzuschließen, bevor ein nächster Versuch Poolkapazität beansprucht. Halten Sie die fehlgeschlagene Phase und die verstrichene Zeit fest; wiederholte Lesevorgänge mit Fortschritt können Inaktivitätslimits erfüllen, während die Gesamtaufgabe zu lange dauert.
Die Upstream-Frist eines Gateways gehört zu diesem Gateway. Sobald es 504 zurückgibt, kann ungenutztes Client-Budget den abgeschlossenen Versuch nicht verlängern. Halten Sie jeden Timer an seinem Eigentümer, wenn Sie entscheiden, welche Einstellung korrigiert werden muss.