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 중국어 웹사이트의 기타 관련 기사를 참조하세요!