> 백엔드 개발 > PHP 튜토리얼 > PHP는 어떻게 차단하지 않고 비동기 HTTP 요청을 할 수 있습니까?

PHP는 어떻게 차단하지 않고 비동기 HTTP 요청을 할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-25 22:01:14
원래의
575명이 탐색했습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿