Maison > développement back-end > tutoriel php > Comment PHP peut-il effectuer des requêtes HTTP asynchrones sans blocage ?

Comment PHP peut-il effectuer des requêtes HTTP asynchrones sans blocage ?

Barbara Streisand
Libérer: 2024-12-25 22:01:14
original
575 Les gens l'ont consulté

How Can PHP Make Asynchronous HTTP Requests Without Blocking?

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);
Copier après la connexion

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);
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal