Sensible HTTP POST-Timeout-Werte zu verwenden, wenn die Ausgabe programmatisch Anfragen?

StackOverflow https://stackoverflow.com/questions/171099

  •  05-07-2019
  •  | 
  •  

Frage

Wenn programmatisch HTTP POST-Anfragen Ausgabe, welche Timeout-Wert sinnvoll wäre?

In meinem Fall, ich suche ‚vernünftig‘ Timeout-Werte zu setzen, wenn POST-Requests in PHP zu machen, aber das gilt für jede beliebige Sprache.

Ich muss in der Lage, eine Reihe von Anfragen zu stellen, die jeweils an einem vom Benutzer angegebenen URL. Wenn ich Anfragen verarbeiten nacheinander statt gleichzeitig tun müssen, ich möchte eine vernünftige Zeit geben, über die hinaus eine Anforderung haben gilt als abgelaufen.

PHP default Socket-Timeout beträgt 60 Sekunden. Dies scheint eine unnötig lange Zeit zu warten, bevor eine Anforderung der Entscheidung nicht abgeschlossen sein wird.

Da diese POST-Requests sie schnell abschließen sollten - es gibt keine Daten abgerufen werden und zurückgeführt, wie mit einer GET-Anfrage

.

Wir sollten in der Lage sein, anzunehmen, die meiste Zeit , dass das Fehlen einer Antwort auf eine Anfrage innerhalb von X Sekunden zu erteilen bedeutet, dass der Host unwahrscheinlich ist, für Werte eine Antwort innerhalb einer angemessenen Frist zu erteilen von X deutlich weniger als 60.

Sicher Hosts dauern selten länger als 60 Sekunden auf eine einfache POST-Anforderung zu reagieren. Haben sie noch selten mehr als 10 Sekunden dauern? 5 Sekunden?

Was sinnvolle Werte für X in der Praxis sein könnte? Rechtfertigungen Vorschläge begleitet wäre äußerst nützlich sein.

War es hilfreich?

Lösung

würde ich empfehlen, einen Test einrichten, da es zu viele Faktoren beteiligt Wert zu geben, die immer dann sinnvoll sein wird.

Eine POST-Anfrage sendet Daten verarbeitet werden. Wie lange mit der Verarbeitung nehmen? Dies wird application / Daten spezifisch sein.

Wo ist der Wirt? Der Benutzer liefert die URL, so dass wird unbekannt sein. Wir können nicht wissen, was Verkehr wie zwischen der Anwendung und dem Host. Wir können nicht die Serverbelastung des Host kennen.

Im Wesentlichen gibt es keine universelle vernünftige Timeout. Sie haben Ihren eigenen Ermessen zu verwenden, basierend auf Ihren spezifischen Bedürfnissen. Legen Sie einen Test und verwenden, dass Ihre Grenzen zu bestimmen.

Andere Tipps

Die meisten Bibliotheken haben eine Connection-Timeout und eine Lese Timeout. Das heißt, das Timeout zwischen dem Versuch, auf den Remote-Server, und das Timeout nach dem Senden der Anforderung zu verbinden, dass sie auf eine Antwort warten sollen.

Wenn dies ein lokaler Web-Service, würde ich setzen Sie die Connection-Timeout niedrig, 1 Sekunde oder weniger, wenn die Bibliothek unterstützt wird. Wenn der Remote-Service verbinden Sie nicht verfügbar IMHO ist es besser, zurückzukehren, um eine Antwort an den Benutzer sofort, als alle Fäden Ihre Arbeiter zu ermöglichen, sich auf diesem entfernten Dienst zu blockieren, so dass andere Upstream-Fehler.

Wie bei der Lese Timeout, dass heikler ist, müssen Sie es, gering sein, so dass Sie nicht Ihren Pool von Arbeitnehmern erschöpfen, die darauf warten, dass der Remote-Dienst zu stellen, aber sie auch nicht wollen, es so niedrig, dass es die Verbindung schließt, bevor eine Antwort zu lesen. Das ist etwas, das Sie testen, dann als Metrik zu verfolgen, wenn Ihr System in der Produktion ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top