Asynchrone HTTP-Anfragen in PHP: So vermeiden Sie das Warten auf Antworten
In PHP umfasst die Verarbeitung von HTTP-Anfragen normalerweise die Verwendung von Blockierungsfunktionen wie file_get_contents( ), wodurch die Skriptausführung angehalten wird, bis eine Antwort empfangen wird. Dies kann die Effizienz einschränken, insbesondere wenn mehrere oder nicht zeitkritische Anfragen gestellt werden.
Lösung: Nicht blockierende HTTP-Anfragen
Um diese Einschränkung zu überwinden, bietet PHP Methoden an zum Senden nicht blockierender HTTP-Anfragen. Ein Ansatz ist die Verwendung von stream_context_create():
$options = [ 'http' => [ 'method' => 'POST', 'header' => 'Content-Type: application/json', 'content' => json_encode($data) ], 'ssl' => [ 'verify_peer' => false ] ]; $context = stream_context_create($options); file_get_contents("http://example.com/api", false, $context);
Dadurch wird eine HTTP-Anfrage initiiert, ohne auf eine Antwort zu warten. Es ist jedoch wichtig zu beachten, dass die Option „Verify_peer“ auf „false“ gesetzt ist, um Probleme bei der Zertifikatsüberprüfung zu vermeiden.
Benutzerdefinierte Implementierung mit Sockets
Eine andere Möglichkeit besteht darin, Sockets direkt mit zu erstellen PHPs fsockopen()-Funktion:
function post_without_wait($url, $params) { // Prepare POST data and URL parameters $post_string = http_build_query($params); $url_parts = parse_url($url); $host = $url_parts['host']; $port = isset($url_parts['port']) ? $url_parts['port'] : 80; $socket = fsockopen($host, $port); // Construct HTTP POST request header $request = "POST {$url_parts['path']} HTTP/1.1\r\n"; $request .= "Host: {$host}\r\n"; $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; $request .= "Content-Length: " . strlen($post_string) . "\r\n"; $request .= "Connection: Close\r\n\r\n"; $request .= $post_string; // Send HTTP request and close socket fwrite($socket, $request); fclose($socket); }
Diese Funktion sendet eine HTTP-POST-Anfrage, ohne auf eine Antwort zu warten. Es erfordert eine URL und ein Array von Parametern als Argumente.
Das obige ist der detaillierte Inhalt vonWie kann PHP asynchrone HTTP-Anfragen ohne Blockierung stellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!