首頁 >後端開發 >php教程 >PHP 如何在不阻塞的情況下進行非同步 HTTP 請求?

PHP 如何在不阻塞的情況下進行非同步 HTTP 請求?

Barbara Streisand
Barbara Streisand原創
2024-12-25 22:01:14599瀏覽

How Can PHP Make Asynchronous HTTP Requests Without Blocking?

PHP 中的非同步HTTP 請求:如何避免等待回應

在PHP 中,處理HTTP 請求通常涉及使用阻塞函數,如file_get_contents ( ),這會暫停腳本執行,直到收到回應。這會限制效率,尤其是在發出多個或非時間敏感請求時。

解決方案:非阻塞 HTTP 請求

為了克服此限制,PHP 提供了方法用於發出非阻塞 HTTP 請求。一種方法是使用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);

這會發起HTTP請求而不等待回應。但是,需要注意的是,verify_peer 選項設定為 false 以避免憑證驗證問題。

使用套接字自訂實作

另一個選項是直接使用建立套接字PHP 的fsockopen() 函數:

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);
}

函數發送HTTP POST 請求,無需等待一個回應。它需要一個 URL 和一個參數陣列作為參數。

以上是PHP 如何在不阻塞的情況下進行非同步 HTTP 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn