Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann PHP asynchrone HTTP-Anfragen ohne Blockierung stellen?

Wie kann PHP asynchrone HTTP-Anfragen ohne Blockierung stellen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-25 22:01:14628Durchsuche

How Can PHP Make Asynchronous HTTP Requests Without Blocking?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn