현재 위치: > 최신 기사 목록> curl_multi_close가 누락되지 않고 모든 요청을 종료하도록하는 방법

curl_multi_close가 누락되지 않고 모든 요청을 종료하도록하는 방법

gitbox 2025-05-29

PHP에서 curl_multi_* 함수를 사용하는 경우 프로그램의 동시성을 개선하기 위해 여러 HTTP 요청을 동시에 시작할 수 있습니다. curl_multi_close 함수는 모든 동시 요청을 닫는 데 사용되지만 모든 요청을 올바르게 닫고 누락을 피하는 방법은 여전히 ​​문제가됩니다.

1. Curl_multi_* 시리즈 기능을 이해하십시오

요청을 올바르게 닫는 방법에 대해 논의하기 전에 먼저 Curl_multi_* 기능의 작동 방식을 이해해야합니다. curl_multi_* 시리즈 함수는 주로 다음과 같습니다.

이러한 기능은 종종 여러 동시 요청을 효율적으로 처리하기 위해 서로 함께 사용됩니다.

2. CURL_MULTI_CLOSE를 사용할 때 일반적인 문제

다중 공유 요청 처리에서 가장 일반적인 문제 중 하나는 Curl_Multi_Close가 호출되면 모든 요청 핸들이 올바르게 닫히지 않는다는 것입니다. 그렇게하면 자원 누출로 이어지고 프로그램의 안정성에 영향을 미칩니다.

일반적으로 문제는 다음과 같은 상황에서 발생합니다.

  • curl_multi_exec이 모든 요청을 완료하는지 확인하는 것을 잊었습니다.

  • curl_multi_close 전에 각 핸들은 올바르게 제거되지 않았습니다.

  • 부적절한 자원 관리로 인해 일관되지 않은 셧다운 핸들이 발생합니다.

3. 모든 동시 요청을 정확하게 닫습니다

curl_multi_close를 사용할 때 모든 요청이 올바르게 닫히도록하려면 다음을 수행해야합니다.

1 단계 : 손잡이를 초기화하고 추가합니다

먼저 여러 핸들을 초기화하고 각 요청에 대해 별도의 컬 핸들을 초기화합니다.

 $mh = curl_multi_init(); // 여러 핸들을 초기화합니다
$ch1 = curl_init("https://gitbox.net/api/endpoint1"); // 첫 번째 요청
$ch2 = curl_init("https://gitbox.net/api/endpoint2"); // 두 번째 요청

// 요청 핸들을 여러 핸들에 추가하십시오
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

2 단계 : 요청을 실행하십시오

다음으로 Curl_Multi_Exec을 사용하여 모든 요청이 완료 될 때까지 모든 요청을 실행합니다.

 do {
    $mrc = curl_multi_exec($mh, $active); // 요청을 실행하십시오
    if ($active) {
        curl_multi_select($mh); // 요청이 완료 될 때까지 기다리십시오
    }
} while ($active && $mrc == CURLM_OK);

3 단계 : 결과를 가져 와서 핸들을 닫습니다

모든 요청이 완료되면 curl_multi_getContent를 사용하여 각 요청의 응답 내용을 얻은 다음 여러 핸들에서 각 핸들을 제거하고 마지막으로 모든 핸들을 닫을 수 있습니다.

 // 요청 된 콘텐츠를 받으십시오
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

// 각 핸들을 닫고 제거하십시오
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);

// 모든 요청을 닫습니다
curl_close($ch1);
curl_close($ch2);

// 마지막으로 여러 핸들을 닫으십시오
curl_multi_close($mh);

주요 단계 : 핸들이 올바르게 제거되고 닫히도록

curl_multi_close를 호출하기 전에 모든 핸들이 올바르게 제거되고 각 핸들이 닫혀 있는지 확인하십시오. 이것은 자원 누출과 불필요한 메모리 사용을 피합니다.

4. 예외 처리 및 최적화

실제 개발에서는 일부 요청 실패가 발생할 수 있습니다. 예외적 인 상황에서 모든 핸들을 올바르게 닫을 수 있도록 실행 중에 예외 캐치 및 오류 처리 메커니즘을 추가하는 것이 좋습니다.

 // 예외 처리를 추가합니다
try {
    // 동시 요청을 실행하는 코드(위에서 볼 수 있듯이)

    if ($mrc != CURLM_OK) {
        throw new Exception("Error in curl_multi_exec: $mrc");
    }
} catch (Exception $e) {
    // 예외와 가까운 자원을 포착하십시오
    echo "Error: " . $e->getMessage();
    curl_multi_remove_handle($mh, $ch1);
    curl_multi_remove_handle($mh, $ch2);
    curl_close($ch1);
    curl_close($ch2);
    curl_multi_close($mh);
}

이러한 방식으로 오류가 발생하더라도 프로그램은 여전히 ​​자원을 올바르게 정리할 수 있습니다.

5. 요약

curl_multi_* 일련의 함수를 합리적으로 사용하고 다음 지점을 따르면 Curl_multi_Close가 모든 동시 요청을 올바르게 닫을 수 있는지 확인할 수 있습니다.

  • curl_multi_close를 호출하기 전에 각 핸들을 제거하십시오.

  • curl_multi_exec을 사용할 때 모든 요청이 완료 될 때까지 기다리십시오.

  • handles를 피하기 위해 예외를 적절하게 처리하십시오.

이러한 모범 사례를 통해 동시 요청을 더 잘 관리하고 리소스 누출을 피하며 코드 견고성 및 성능을 향상시킬 수 있습니다.