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
Freigeben: 2024-12-25 22:01:14
Original
622 Leute haben es durchsucht

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);
Nach dem Login kopieren

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);
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage