현재 위치: > 최신 기사 목록> curl_multi_close 멀티 스레드 요청이있는 모범 사례

curl_multi_close 멀티 스레드 요청이있는 모범 사례

gitbox 2025-05-12

PHP에서는 Multithreaded 요청이 종종 Curl 라이브러리를 사용하여 구현됩니다. Curl은 HTTP 요청을하는 데 도움이되는 강력한 라이브러리입니다. Curl_multi_* 시리즈 기능을 사용하여 PHP는 여러 HTTP 요청을 병렬로 보낼 수 있으므로 응용 프로그램 성능을 향상시킬 수 있습니다. 그러나 많은 사람들이 요청이 끝난 후 자원 정리를 무시합니다. 멀티 스레드 요청의 성능을 최적화하기 위해 Curl_Multi_Close 기능의 올바른 사용이 특히 중요합니다.

curl_multi_close 란 무엇입니까?

curl_multi_close 함수는 curl_multi_init 에 의해 초기화 된 CUL Multi-Handle을 닫는 데 사용됩니다. 이 기능을 호출하면 컬 리소스를 제거하고 메모리 누출을 피하고 각 병렬 요청이 완료된 후 연결이 올바르게 닫히도록합니다.

멀티 스레드 요청을 할 때 각 요청을 완료하는 데 시간이 걸릴 수 있습니다. 성능을 극대화하고 메모리 소비를 줄이기 위해 Curl_multi_Close 는 매우 중요한 기능입니다.

curl_multi_close를 사용하여 멀티 스레드 요청 성능을 최적화하는 방법?

다음은 curl_multi_close를 사용하여 멀티 스레드 요청 성능을 최적화하는 기본 예입니다.

 <?php

// 여러 요청을 만듭니다 URL 정렬
$urls = [
    "http://gitbox.net/api/data1",
    "http://gitbox.net/api/data2",
    "http://gitbox.net/api/data3"
];

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

// 루프는 각 요청을 초기화합니다
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  // 리턴 내용을 문자열로 설정하십시오
    curl_multi_add_handle($multiHandle, $ch);       // 添加到多线程핸들中
    $curlHandles[] = $ch;  // 각각 저장하십시오 cURL 핸들
}

// 모든 요청을 수행하십시오
do {
    $status = curl_multi_exec($multiHandle, $active);
    if ($active) {
        // 모든 요청이 완료 될 때까지 기다립니다
        curl_multi_select($multiHandle);
    }
} while ($active);

// 모든 요청의 결과를 얻고 리소스 정리
foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    echo $response . "\n";  // 출력 요청 결과

    // 제거하다 cURL 핸들
    curl_multi_remove_handle($multiHandle, $ch);

    // 폐쇄 cURL 핸들
    curl_close($ch);
}

// 폐쇄多重 cURL 핸들
curl_multi_close($multiHandle);
?>

코드를 설명하십시오

  1. 여러 요청 초기화 : 먼저 여러 URL이 포함 된 배열을 정의합니다. 그런 다음 curl_init을 사용하여 각 URL의 컬 핸들을 초기화하십시오.

  2. 여러 컬 핸들에 핸들을 추가하십시오 : curl_multi_add_handle 함수를 통해 각 컬 핸들을 여러 핸들에 추가하여 여러 요청을 병렬로 실행할 수 있도록합니다.

  3. 모든 요청을 수행하십시오 : curl_multi_exec을 사용하여 모든 병렬 요청을 수행하십시오. 요청 프로세스 중에 Curl_Multi_Select를 사용하여 요청이 완료 될 때까지 기다릴 때까지 대기하지 않도록하십시오.

  4. 리소스 정리 : 모든 요청이 완료된 후 Curl_multi_getContent를 통해 각 요청에 대한 응답 데이터를 얻습니다. 그런 다음 curl_multi_remove_handle을 사용하여 여러 핸들에서 각 컬 핸들을 제거하고 Curl_Close를 호출하여 각 핸들을 닫습니다.

  5. 여러 핸들을 닫으십시오 : 마지막으로 curl_multi_close를 사용하여 여러 컬 핸들을 닫으십시오. 이 단계는 메모리 누출을 피하기 위해 모든 리소스를 확보하는 것입니다.

모범 사례 : 병렬 요청을 최적화합니다

  1. 병렬 요청 수를 제한 : PHP는 다중 스레드 요청을 만들 수 있지만 너무 많은 동시 요청으로 인해 서버로드가 과도 할 수 있습니다. 동시성 수를 합리적으로 제한하면 성능을 향상시키고 불필요한 네트워크 부담을 피할 수 있습니다.

  2. 오류 처리 : 실제 응용 프로그램에서 각 요청의 반환 상태를 확인하고 요청 실패를 처리해야합니다. Curl_GetInfo를 통해 자세한 오류 정보를 얻어 프로그램의 안정성을 보장 할 수 있습니다.

  3. 리소스 릴리스 : Curl_Multi_CloseCurl_Close 호출은 매우 중요한 단계이며 모든 리소스가 릴리스되도록 할 수 있습니다. 이 단계를 잊어 버리면 특히 동시에 많은 요청을 할 때 메모리 누출이 발생할 수 있습니다.

  4. 배치 요청 분할 : 요청이 매우 많으면 요청을 여러 배치로 분할하는 것을 고려하십시오. 각 배치는 더 적은 요청을 처리합니다. 이것은 특정 배치에 대한 너무 큰 요청으로 인한 성능 병목 현상을 피할 수 있습니다.

요약

Curl_multi_Close를 사용하여 다중 스레드 요청에 대한 리소스 릴리스를 최적화함으로써 응용 프로그램의 성능 및 안정성을 효과적으로 향상시킬 수 있습니다. 동시 요청 및 리소스 청소를 올바르게 관리하면 메모리 누출을 줄일뿐만 아니라 프로그램 응답 속도를 향상시킬 수 있습니다.