동시 요청을 할 때 PHP의 컬 확장은 여러 HTTP 요청을 동시에 보내는 데 도움이되어 프로그램 효율성을 향상시킬 수 있습니다. 그러나 여러 요청을 처리 할 때 리소스가 올바르게 릴리스되고 메모리 누출 또는 핸들 누출을 피하는 방법이 개발자의 초점이되었습니다. 이 기사에서는 Curl_Multi_Close 기능을 올바르게 사용하여 원활한 리소스 릴리스를 보장하는 방법에 중점을 둘 것입니다.
curl_multi_close 함수는 CURL 멀티 핸들을 닫고 관련된 모든 리소스를 해제하는 데 사용됩니다. curl_multi_init을 사용하여 여러 핸들을 생성하고 여러 요청을 보낼 때 모든 요청은 해당 핸들을 통해 관리됩니다. 메모리 누출을 피하기 위해 모든 요청을 완료 한 후 Curl_multi_Close를 호출하려면 관련 리소스를 확보해야합니다.
동시 요청 과정에서 다음 단계는 일반적으로 다음과 같습니다.
여러 컬 세션을 초기화하고 여러 핸들에 추가하십시오.
모든 요청을 수행하고 완료되기까지 기다립니다.
각 요청에 대한 응답 데이터가 올바르게 처리되어 있는지 확인하십시오.
curl_multi_close 함수를 사용하여 멀티 핸들을 닫고 리소스를 제거하십시오.
다음으로 기본 코드 예제는 curl_multi_close를 올바르게 사용하는 방법을 보여줍니다.
<?php
// 1. 초기화 cURL 여러 핸들
$mh = curl_multi_init(); // 创建一个여러 핸들
// 2. 싱글을 만듭니다 cURL 세션并添加到여러 핸들中
$ch1 = curl_init('http://gitbox.net/api/request1');
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1);
$ch2 = curl_init('http://gitbox.net/api/request2');
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch2);
// 3. 여러 요청을 수행하십시오
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
curl_multi_select($mh); // 요청이 완료 될 때까지 기다리십시오
}
} while ($active && $status == CURLM_OK);
// 4. 응답 데이터를 얻습니다
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// 5. 폐쇄 cURL 세션
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
// 6. 리소스를 자유롭게합니다
curl_close($ch1);
curl_close($ch2);
// 7. 폐쇄여러 핸들
curl_multi_close($mh);
echo "묻다1응답: " . $response1 . "\n";
echo "묻다2응답: " . $response2 . "\n";
?>
리소스 릴리스 순서 : 닫기 전에 여러 핸들에서 각 개별 컬 세션을 제거하십시오. 그렇지 않으면 핸들이 잘못 해제되어 메모리 누출이 발생할 수 있습니다.
오류 처리 : curl_multi_exec 실행 중에 각 요청의 실행 상태를 확인하는 데주의를 기울여야합니다. 요청이 실패하면 오류를 제 시간에 처리하고 해당 리소스를 해제해야합니다.
성능 최적화 : 많은 요청이있는 경우 불필요한 차단을 최소화하십시오. curl_multi_select 로 CPU 사용량을 줄일 수 있습니다.
curl_multi_close 함수의 올바른 사용은 동시 요청에서 리소스를 자유롭게하는 데 중요합니다. 위의 프로세스를 따르면 메모리 누출을 피할뿐만 아니라 프로그램 안정성 및 성능을 향상시켜 각 컬 핸들과 다중 핸들이 올바르게 닫히고 해제되도록합니다. 특히 높은 동시성 시나리오에서, 자원의 합리적인 관리는 코드의 견고성을 크게 향상시킬 것입니다.