현재 위치: > 최신 기사 목록> Curl_Close를 사용하여 배치 요청 처리를 위해 Curl_Multi_Exec과 협력하는 방법은 무엇입니까?

Curl_Close를 사용하여 배치 요청 처리를 위해 Curl_Multi_Exec과 협력하는 방법은 무엇입니까?

gitbox 2025-05-26

많은 HTTP 요청을 할 때 PHP가 제공하는 Curl_multi_exec은 동시 요청을 구현하기위한 일반적인 도구입니다. 그러나 많은 개발자는 Curl_Close 의 올바른 타이밍 인 사용할 때 중요한 세부 사항을 무시합니다. 부적절하게 사용하면 자원 누출로 이어질뿐만 아니라 불완전한 요청 및 비정상적인 응답과 같은 문제를 일으킬 수도 있습니다. 이 기사에서는 Curl_Close 기능을 올바르게 사용하고 Curl_Multi_Exec 과 협력하여 효율적이고 안정적인 배치 HTTP 요청 처리를 달성하는 방법을 자세히 설명합니다.

1. Curl_multi_Exec 소개

CURL_MULTI_EXEC 는 PHP Curl Extension에서 제공하는 기능 중 하나이며,이를 통해 CURL 멀티 핸들에 여러 개의 CURL 요청 핸들을 추가하고 이러한 요청을 동시에 비 블로킹 방식으로 실행할 수 있습니다. 기존의 일련의 요청과 비교하여 처리 효율성을 크게 향상시킬 수 있습니다.

2. 일반적인 잘못된 사용법

많은 개발자가 즉시 Curl_Close ($ CH) 를 호출하여 요청을 처리 한 후 리소스를 해제합니다. curl_multi_exec을 사용한 동시성 모델에서 :

 $mh = curl_multi_init();
$chs = [];

foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $chs[] = $ch;

    // 잘못된 방법:여기서 전화하지 마십시오 curl_close
    // curl_close($ch);
}

3. 올바른 사용 단계

curl_multi_execcurl_close를 올바르게 사용하는 프로세스는 다음과 같습니다.

  1. 멀티 핸들을 초기화합니다.

  2. 여러 컬 핸들 및 설정 옵션을 작성하십시오.

  3. 컬 핸들을 멀티 핸들에 추가하십시오.

  4. 요청을 실행하십시오.

  5. 핸들을 하나씩 제거하고 Curl_Close를 호출하십시오.

  6. 멀티 핸들을 닫습니다.

완전하고 정확한 예는 다음과 같습니다.

 $urls = [
    'https://gitbox.net/api/endpoint1',
    'https://gitbox.net/api/endpoint2',
    'https://gitbox.net/api/endpoint3',
];

$mh = curl_multi_init();
$handles = [];
$responses = [];

// 1. 각각을 만들고 구성합니다 curl 핸들
foreach ($urls as $i => $url) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
    ]);
    curl_multi_add_handle($mh, $ch);
    $handles[$i] = $ch;
}

// 2. 동시 요청을 수행하십시오
$running = null;
do {
    $status = curl_multi_exec($mh, $running);
    if ($running) {
        curl_multi_select($mh);
    }
} while ($running && $status == CURLM_OK);

// 3. 응답을 읽고 리소스를 청소하십시오
foreach ($handles as $i => $ch) {
    $responses[$i] = curl_multi_getcontent($ch);
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch); // 적절한 시간:존재하다 handle 제거 된 후 닫습니다
}

curl_multi_close($mh);

// 선택 과목:응답 데이터 처리
foreach ($responses as $i => $body) {
    echo "Response #$i: " . substr($body, 0, 100) . PHP_EOL;
}

4. 주목해야 할 핵심 요점

  • 컬 핸들을 미리 닫지 마십시오 . Curl_Close를 호출하기 전에 요청이 실행되고 멀티 핸들에서 제거되었는지 확인해야합니다.

  • curl_multi_select 는 성능 향상의 열쇠이며 CPU 공전을 방지 할 수 있습니다.

  • 모든 핸들은 curl_multi_remove_handlecurl_close 에 의해 끝에 올바르게 해제되어야합니다. 그렇지 않으면 메모리 누출이 발생할 수 있습니다.

  • 사용 된 URL 도메인 이름이 고정 된 경우 통합 구성 또는 가변 교체를 통해 중앙에서 관리 할 수 ​​있습니다.

 $domain = 'gitbox.net';
$url = "https://{$domain}/api/endpoint";

V. 결론

Curl_Multi_ExecCurl_Close 의 사용시 타이밍을 올바르게 관리함으로써 PHP 배치 HTTP 요청 처리의 효율성과 안정성을 크게 향상시킬 수 있습니다. 이 프로세스는 특히 높은 일환 데이터 수집, API 집계 및 기타 응용 프로그램 시나리오에 적합하며 모든 PHP 개발자가 마스터 할 자격이있는 기술입니다.