Heim  >  Artikel  >  Backend-Entwicklung  >  http-Client: schnelleres Timeout, wenn kein Netzwerk vorhanden ist

http-Client: schnelleres Timeout, wenn kein Netzwerk vorhanden ist

WBOY
WBOYnach vorne
2024-02-11 12:09:09690Durchsuche

http-Client: schnelleres Timeout, wenn kein Netzwerk vorhanden ist

PHP-Redakteur Xinyi stellt Ihnen heute ein Tool namens „http-Client: schnellere Zeitüberschreitung bei fehlendem Netzwerk“ vor. In einer instabilen oder nicht netzwerkfähigen Umgebung kann eine lange Zeitüberschreitung zu einer schlechten Benutzererfahrung führen. Dieses HTTP-Client-Tool kann zur Lösung dieses Problems beitragen. Es optimiert den Timeout-Mechanismus, um das Timeout zu beschleunigen, wenn kein Netzwerk vorhanden ist, und verbessert so die Reaktionsgeschwindigkeit der Anwendung und das Benutzererlebnis. Werfen wir einen Blick auf die spezifischen Funktionen und die Verwendung dieses Tools!

Frageninhalt

Wenn Sie eine HTTP-Get-Anfrage stellen, wird auch dann, wenn keine Netzwerkverbindung besteht, die vollständige Zeitüberschreitung abgewartet, bevor ein Fehler zurückgegeben wird.

Ich denke, dass es intern sehr schnell weiß, dass es fehlgeschlagen ist; ich möchte, dass sich der Fehler so schnell wie möglich ausbreitet, anstatt auf eine Zeitüberschreitung zu warten. Ich möchte, dass es 20 Sekunden lang versucht, während das Netzwerk vorhanden, aber langsam ist. Wie kann ich einen Client mit diesem Verhalten einrichten?

Sehen Sie sich den Code des Problems an:

var client = &http.Client{
    Timeout: time.Second * 20,
}

response, err := client.Get(url)

Wenn es darauf ankommt: Ich verwende Gomobile und es läuft auf dem iOS-Emulator.

Workaround

Die Antwort hier ist sehr einfach: Golang weiß intern, wenn kein Netzwerk vorhanden ist, und meldet dies auch, und gibt den Fehler umgehend weiter, ohne auf die 20-Sekunden-Zeitüberschreitung warten zu müssen. Es wird nichts über das Netzwerk gesendet und es gibt keine Wartezeiten. In Go scheint alles gut zu funktionieren und es sind keine Änderungen am Beispielcode erforderlich.

Das Problem tritt immer noch auf, allerdings nur im iOS-Simulator. Dies scheint ein Problem zu sein, das speziell darauf zurückzuführen ist, wie der iOS-Simulator Verbindungen zum Host-Betriebssystem zuordnet. Ich bin mir nicht sicher, ob dies ein seit langem bestehendes Problem oder ein einmaliges Problem bei meiner MacOS/Emulator-Kopplung ist. Auf Host-MacOS- und echten iOS-Geräten funktioniert es einwandfrei. Wenn keine Netzwerkschnittstelle vorhanden ist, kommt es sofort zu einer Zeitüberschreitung.

Es sind keine zusätzlichen Anfragen erforderlich, da dies nur ein weiterer Weg zum gleichen Ergebnis ist, was die Wahrscheinlichkeit weiterer Fehler erhöht. Könnte helfen, Netzwerkprobleme von Problemen mit einem bestimmten Dienst zu unterscheiden oder einen schnelleren Indikator für den tatsächlichen Netzwerkstatus zu erhalten (nachdem die verbundene Netzwerkschnittstelle vorhanden ist).

Das obige ist der detaillierte Inhalt vonhttp-Client: schnelleres Timeout, wenn kein Netzwerk vorhanden ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen