CURL_MULTI_* 시리즈 기능은 동시 HTTP 요청에 PHP를 사용할 때 매우 중요한 도구입니다. 그 중에서 Curl_multi_Remove_handle () 및 Curl_Multi_Close ()는 종종 사용되지만 오류가 발생하기 쉬운 두 가지 함수입니다. 사용 타이밍과 예방 조치에 대한 올바른 이해는 많은 일반적인 함정을 피할 수 있습니다.
curl_multi_remove_handle () 의 목적은 curl_multi_handle 에 추가 된 단일 curl_easy_handle을 제거하는 것입니다. 제거 후이 쉬운 핸들은 별도로 닫히거나 재사용 할 수 있으며 멀티 핸들은 더 이상 관리하지 않습니다.
참고 : 별도의 쉬운 손잡이를 닫으려고 할 때 먼저 멀티 핸들에서 제거해야합니다. 그렇지 않으면 프로그램 동작이 정의되지 않습니다.
curl_multi_close () 는 전체 멀티 핸들을 닫는 데 사용되는 함수입니다. 호출 후이 멀티 핸들이 더 이상 사용되지 않으며 멀티 핸들과 관련된 모든 리소스는 내부적으로 출시됩니다. 내부 쉬운 손잡이를 자동으로 닫지 않으므로 멀티 핸들을 닫기 전에 모든 쉬운 핸들이 제거되었는지 확인해야합니다.
올바른 사용 프로세스는 일반적으로 다음과 같습니다.
멀티 핸들 및 여러 개의 쉬운 핸들을 초기화합니다.
멀티 핸들에 쉬운 핸들을 추가하십시오.
요청을 처리하려면 멀티 핸들을 실행하십시오.
요청이 완료되면 멀티 핸들에서 쉬운 핸들을 제거하십시오.
각각의 쉬운 손잡이를 닫습니다.
멀티 핸들을 닫습니다.
쉬운 핸들을 제거하지 않고 멀티 핸들을 닫는 것과 같이 순서가 반전되면 자원 누출 또는 충돌이 발생할 수 있습니다.
완전하고 올바른 데모는 다음과 같습니다. URL은 요구 사항을 사용합니다 (도메인 이름은 gitbox.net ).
<?php
// 초기화 multi handle
$mh = curl_multi_init();
// 두 개를 만듭니다 easy handle
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// 할 것이다 easy handle 추가 multi handle
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// 구현하다 multi handle
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
// 응답을 검색하십시오
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// 제거하다 easy handle
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
// 폐쇄 easy handle
curl_close($ch1);
curl_close($ch2);
// 폐쇄 multi handle
curl_multi_close($mh);
// 출력 내용
echo $response1;
echo $response2;
?>
먼저 curl_multi_remove_handle ()을 한 다음 curl_close () Easy Handle을 사용해야합니다.
멀티 핸들 ( curl_multi_close )을 닫기 전에 모든 쉬운 핸들이 제거되었는지 확인하십시오.
쉬운 핸들 요청이 실패하더라도 올바르게 제거하고 직접 건너 뛰지 마십시오.
Curl_Multi_Select ()를 호출하면 특히 동시성이 많은 경우 CPU 사용량을 효과적으로 줄일 수 있습니다.
멀티 핸들 자체는 쉬운 손잡이를 해제하는 데 도움이되지 않습니다. Curl_Close ()를 직접 호출해야합니다.
이러한 기술을 따르는 것은 프로그램의 안정성을 보장 할뿐만 아니라 메모리 누출과 자원 폐기물을 효과적으로 피할 수 있습니다.