현재 위치: > 최신 기사 목록> curl_exec 및 curl_multi_close 사용 모범 사례

curl_exec 및 curl_multi_close 사용 모범 사례

gitbox 2025-05-29

개발 중에는 종종 여러 서버 또는 API에 HTTP 요청을 시작해야합니다. 기존의 단일 스레딩 방법에 따라 하나씩 요청하면 느리게뿐만 아니라 서버 리소스도 낭비됩니다. PHP는 CURL_MULTI_EXECCURL_MULTI_CLOSE 기능을 통해 다중 요청 동시 처리를 구현하여 효율성을 크게 향상시킬 수있는 CURL EXTENSION을 제공합니다.

이 기사는 효율적인 동시성 처리를 위해 Curl_Multi_Close 와 결합 된 Curl_Exec을 사용하는 방법을 자세히 소개하고 특정 예제 코드를 제공합니다.

기본 개념

  • curl_exec () : 단일 컬 요청을 실행합니다.

  • curl_multi_exec () : 여러 컬 핸들을 동시에 실행합니다.

  • curl_multi_close () : 컬 배치 핸들을 닫고 리소스를 해제하십시오.

많은 요청을 동시에 처리 해야하는 경우 각 요청에 대해 Curl_Exec을 별도로 호출하는 대신 Curl_Multi_Exec을 사용하는 것이 좋습니다. curl_multi_close는 모든 요청이 처리 된 후 리소스를 정리하는 중요한 단계입니다.

샘플 코드

다음은 여러 인터페이스를 동시에 요청하고 응답을 처리하는 방법을 보여주는 간단한 예입니다.

 <?php
// 요청합니다URL목록
$urls = [
    "https://gitbox.net/api/data1",
    "https://gitbox.net/api/data2",
    "https://gitbox.net/api/data3",
];

// 다중 초기화cURL핸들
$multiHandle = curl_multi_init();
$curlHandles = [];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[] = $ch;
}

// 모든 요청을 수행하십시오
$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
    if ($status > 0) {
        // 오류가 발생했습니다
        echo "cURL error: " . curl_multi_strerror($status);
        break;
    }
    // 활성 연결을 기다리고 있습니다
    curl_multi_select($multiHandle);
} while ($running > 0);

// 각 요청의 응답을 처리하십시오
foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    $info = curl_getinfo($ch);
    if (curl_errno($ch)) {
        echo 'Request Error: ' . curl_error($ch) . PHP_EOL;
    } else {
        echo 'HTTP Code: ' . $info['http_code'] . PHP_EOL;
        echo 'Response: ' . $response . PHP_EOL;
    }
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// 폐쇄multi handle
curl_multi_close($multiHandle);
?>

설명

  • 먼저 curl_multi_init () 를 통해 멀티 핸들을 만듭니다.

  • 각 컬을 별도로 설정 한 후 Curl_multi_add_handle ()을 통해 멀티 핸들에 추가하십시오.

  • curl_multi_exec ()를 사용하여 모든 요청을 실행하고 모든 요청이 완료 될 때까지 폴링합니다.

  • curl_multi_select ()는 CPU 유명을 줄이고 효율성을 향상시킬 수 있습니다.

  • 요청이 완료되면 Curl_Multi_GetContent ()를 사용하여 응답 내용을 얻으십시오.

  • 마지막으로 Curl_Multi_Remove_handle ()을 사용하여 핸들을 제거하고 Curl_Multi_Close () 로 멀티 핸들을 닫으려면 리소스를 확보해야합니다.

주목해야 할 것

  • 동시 수 : 일회성 요청에 대해 너무 많은 URL이있는 경우 너무 많은 리소스를 소비하지 않기 위해 한 번에 10 개의 요청 만 전송되는 등 배치로 처리하는 것이 좋습니다.

  • 타임 아웃 처리 : Curlopt_Timeout 또는 CurlOpt_ConnectTimeout은 일부 요청의 장기간 교수형을 피하기 위해 설정할 수 있습니다.

  • 오류 처리 : curl_errno ()curl_error ()를 사용하여 단일 요청에 오류가 없는지 확인하십시오.

  • 연결 재사용 : Curlopt_Forbid_Reuse를 켜면 빈번한 TCP 연결 생성을 피하고 성능을 향상시킬 수 있습니다.

요약

curl_execcurl_multi_close를 결합함으로써 PHP에서 많은 수의 HTTP 동시 요청을 효율적으로 처리 할 수 ​​있습니다. 이 메소드는 전체 요청 시간을 단축 할뿐만 아니라 서버의 동시성 기능을 최대한 활용합니다. 고성능 PHP 응용 프로그램을 구축하는 데 필수적인 기술 중 하나입니다.

이러한 기본 사항을 마스터하면 PHP 응용 프로그램을 더 빠르고 안정적으로 실행할 수 있습니다!