2009-08-26 3 views
1

Wenn eine HTTP-Anfrage erfolgt und der Anrufer die Anfrage abbricht, wird sie trotzdem vervollständigt? Zum Beispiel eine asynchrone JavaScript-GET-Anfrage, um ein Banner zu protokollieren, klicke in die DB und leite dann um. Muss das Skript auf die Antwort warten?Ist eine http-Anfrage immer abgeschlossen?

Antwort

1

Sie sollten warten, bis es sicher ist. Sie wissen nie, wann der Server Ihre Anfrage bearbeiten wird (obwohl dies normalerweise innerhalb von ein paar hundert Millisekunden oder weniger der Fall ist), so dass Sie nicht wissen, ob etwas abgelaufen ist, fehlgeschlagen ist oder ob Sie eine empfangen möchten andere Antwort als erwartet, es sei denn, Sie warten.

2

Der Client sendet keine Benachrichtigung an den Server, dass er die Anforderung abbricht.

PHP weiß nicht, ob der Client die Verbindung getrennt hat, bis er versucht, dem Client einige Daten zu senden (z. B. ein ungepufferter echo() Aufruf), also wenn Ihr Skript keine Daten an den Benutzer zurückgibt ausführen. Wenn es Daten zurückgibt, kann es einen Teil abbrechen, aber dies kann mit ignore_user_abort() geändert werden. Wenn Sie eine andere Umgebung verwenden, müssen Sie die Dokumentation erkunden.

2

In den meisten Fällen wird die Verarbeitung nicht beendet, wenn der Client die Überwachung beendet hat, sobald die Anforderung vom Server empfangen wurde.

Allerdings kann der Server während der Bearbeitung der Anfrage immer fehlschlagen, daher ist es wahrscheinlich keine gute Idee anzunehmen.

3

Wie wichtig ist Ihre Anfrage? Was ist, wenn die Datenbank zu diesem Zeitpunkt nicht verfügbar ist? Was ist, wenn der serverseitige Code eine Ausnahme auslöst?

Bei sehr kritischen Anforderungen müssen Sie möglicherweise eine Art Nachrichtenwarteschlange implementieren, die die Anforderungsdaten speichern kann, bis sie vollständig verarbeitet werden können. Dies wird komplizierter, wenn Sie mit Gittern und Wolken arbeiten (Sie können die Nachricht nicht einfach auf einem einzelnen Knoten in die Warteschlange stellen, da der Knoten möglicherweise einen Hardwarefehler hat). Dies ist jedoch ein Extremfall, bei dem Sie dedizierte Warteschlangenserver erhalten.

1

Sie müssen nicht auf die Antwort warten, damit die Anforderung den Server erreicht. Der Server kann prüfen, ob jemand noch während der Verarbeitung der Anfrage zuhört, aber die Verarbeitung der Anfrage wird gestartet, auch wenn niemand auf die Antwort wartet (es sei denn, es gab einen Fehler auf dem Weg).

Wenn Sie sichergehen möchten, dass die Anfrage wirklich verarbeitet wurde, sollten Sie auf die Antwort warten, aber sie ist nicht erforderlich, damit die Anfrage an den Server weitergeleitet wird.

Verwandte Themen