HTTPRequest - Timeout funktioniert nicht

  • Eigentlich sollte man erwarten, dass ein Request nach Ablauf der in der Option timeout angegebenen Zeit abgebrochen wird. Dem ist nur scheinbar nicht so (zumindest unter PHP 7.4, auch CLI), was dazu führt, dass Requests bis zu N Sekunden (default_socket_timeout) laufen, bevor sie abgebrochen werden. Dies wiederum kann zu Server-Timeouts führen, sollte dadurch die im Webserver festgelegte Ausführungszeit überschritten werden.


    Das ganze lässt sich auch relativ einfach reproduzieren:



    EDIT:


    Was ich vergessen habe zu erwähnen ist, dass ich durchaus geprüft habe, dass stream_socket_client auch den Wert aus der Option erhält. Das Problem liegt also wohl nicht direkt beim WSC. Allerdings kann man das ja auch nicht so lassen, selbst wenn es sich um einen PHP-Fehler handelt.


    EDIT:


    Problem besteht unter allen PHP-Versionen von 5.6 bis 7.4 (mit CLI getestet).

  • Das ist nicht der Punkt. Der Punkt ist, dass ich dem Request ein Timeout von 2 Sekunden mitgebe und dann einen Abbruch nach Überschreiten dieser 2 Sekunden erwarte, unabhängig vom Interpreter.


    Aufgefallen ist das Problem unter FPM. Die Tests mit CLI waren für mich nur einfacher.

    • Official Post

    timeout

    […]

    Note:

    To set a timeout for reading/writing data over the socket, use the stream_set_timeout(), as the timeout only applies while making connecting the socket.

    (Hervorhebung durch mich)



    Edit: Ein Tipp am Rande, zum Testen von Timeouts ist https://api.sandbox.paypal.com ideal, denn die Seite ist zu jeder Tageszeit irre langsam. Wie PayPals normale API, nur in noch langsamerererer.

    Alexander Ebert
    Senior Developer WoltLab® GmbH