Requêtes HTTP asynchrones en PHP : comment éviter d'attendre les réponses
En PHP, le traitement des requêtes HTTP implique généralement l'utilisation de fonctions de blocage telles que file_get_contents( ), qui suspend l'exécution du script jusqu'à ce qu'une réponse soit reçue. Cela peut limiter l'efficacité, en particulier lors de requêtes multiples ou non urgentes.
Solution : Requêtes HTTP non bloquantes
Pour surmonter cette limitation, PHP propose des méthodes pour effectuer des requêtes HTTP non bloquantes. Une approche consiste à utiliser 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);
Cela lance une requête HTTP sans attendre de réponse. Cependant, il est important de noter que l'option verify_peer est définie sur false pour éviter les problèmes de vérification des certificats.
Implémentation personnalisée avec Sockets
Une autre option consiste à créer des sockets directement en utilisant Fonction fsockopen() de PHP :
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); }
Cette fonction envoie une requête HTTP POST sans attendre de réponse. Il nécessite une URL et un tableau de paramètres comme arguments.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!