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中文網其他相關文章!