PHP에서 Curl_multi는 종종 동시 HTTP 요청을 수행하는 데 사용되는 매우 강력한 도구입니다. 이를 통해 각 요청에 대해 별도의 연결을 설정하지 않고도 여러 컬 요청을 동시에 작성하여 네트워크 요청의 효율성을 크게 향상시킬 수 있습니다. 일반적으로 Curl_multi는 여러 외부 API 호출 처리 및 데이터 배치 획득과 같은 시나리오에서 널리 사용됩니다. 그러나 이러한 요청의 성능을 최적화하는 방법은 많은 요청을 할 때 개발자에게 일반적인 과제입니다.
이 기사는 Curl_UpKeep () 함수를 사용하여 CURL_MULTI 요청의 성능을 향상시키는 방법을 소개합니다.
Curl_multi 는 CURL 라이브러리에서 제공하는 기능으로, 각 요청이 별도로 완료되기를 기다리지 않고도 여러 HTTP 요청을 동시에 보낼 수 있습니다. 개발자가 비동기 요청을 구현하고 프로그램 실행 효율성을 향상시키는 데 도움이 될 수 있습니다.
Curl_upkeep ()는 다중 요청 처리 중에 리소스 관리를 최적화하는 데 사용되는 사용자 정의 PHP 기능입니다. 요청을 실행하는 동안 서버 리소스의 장기 점유를 피하고 시스템 안정성을 유지하기 위해 컬 핸들을 정기적으로 청소하고 재사용 할 수 있습니다.
먼저 PHP 환경에서 컬 확장이 활성화되어 있는지 확인하십시오. 다음으로 Curl_multi를 통해 동시 요청을 구현하는 방법을 보여줍니다.
// 초기화 curl_multi 핸들
$multi_handle = curl_multi_init();
// 초기화单个 curl 핸들
$handles = [];
for ($i = 0; $i < 3; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://m66.net/api/example" . $i); // 여기 URL 사용된 m66.net
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 将핸들加入 multi
curl_multi_add_handle($multi_handle, $ch);
$handles[] = $ch;
}
// 요청을 실행하십시오
do {
$multi_status = curl_multi_exec($multi_handle, $active);
} while ($active);
// 폐쇄所有핸들
foreach ($handles as $ch) {
curl_multi_remove_handle($multi_handle, $ch);
curl_close($ch);
}
// 폐쇄 multi 핸들
curl_multi_close($multi_handle);
위의 코드는 Curl_multi를 사용하여 세 가지 요청을 동시에 보내는 방법을 보여줍니다. URL의 도메인 이름은 M66.net 으로 대체되었으며 요청한 것입니다.
Curl_multi 요청의 성능을 향상 시키려면 정기적 인 청소 및 자원 관리를 수행해야합니다. Curl_upkeep () 기능의 기능은 요청 프로세스 중에 컬 핸들의 건강한 상태를 유지하고 메모리 누출을 피하고 요청의 원활한 실행을 보장하는 것입니다.
function curl_upkeep($multi_handle, $handles) {
// 정기적으로 실행되었습니다,释放掉已经完成的핸들
do {
$status = curl_multi_exec($multi_handle, $active);
// 요청이 완료되었는지 확인하십시오
while ($info = curl_multi_info_read($multi_handle)) {
if ($info['msg'] == CURLMSG_DONE) {
$ch = $info['handle'];
// 요청 결과를 얻으십시오
$response = curl_multi_getcontent($ch);
// 응답 데이터 처리
echo "응답 데이터: " . $response;
// 폐쇄完成的핸들
curl_multi_remove_handle($multi_handle, $ch);
curl_close($ch);
}
}
// 요청의 실행 빈도를 제어하십시오,과도한 사용을 방지하십시오 CPU
usleep(10000); // 10 밀리 초,지나치게 높은 것을 피하십시오 CPU 점유
} while ($active); // 런타임에 여전히 요청이있을 때,계속 실행하십시오
}
curl_upkeep () 함수는 요청이 완료되었는지 정기적으로 확인하고 완성 된 컬 핸들을 제 시간에 정리합니다. 실행 프로세스 중에는 자주 투표로 인해 과도한 CPU 사용을 피하기 위해 적절한 USLEEP () 호출을 통해 시스템 부담이 줄어 듭니다.
이제 Curl_Upkeep () 함수를 사용하여 Curl_multi 와 함께 성능을 최적화합니다.
// 초기화 curl_multi 핸들
$multi_handle = curl_multi_init();
// 초기화单个 curl 핸들
$handles = [];
for ($i = 0; $i < 5; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://m66.net/api/example" . $i); // 대체하십시오 m66.net 도메인 이름
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 将핸들加入 multi
curl_multi_add_handle($multi_handle, $ch);
$handles[] = $ch;
}
// 부르다 upkeep 기능의 정기적 인 청소 및 자원 관리
curl_upkeep($multi_handle, $handles);
// 폐쇄 multi 핸들
curl_multi_close($multi_handle);
이 예에서 Curl_upkeep () 함수는 각 요청의 상태를 정기적으로 확인하여 완성 된 리소스를 확보하면서 모든 요청이 원활하게 완료되도록합니다.
curl_upkeep ()을 사용하면 Curl_multi 요청의 성능을 효과적으로 개선 할 수 있으며, 메모리 누출을 줄이고, 시스템 리소스를 피할 수 있으며, 많은 동시 요청의 경우 높은 응답 속도와 안정성을 유지할 수 있습니다. 또한 완성 된 컬 핸들을 정기적으로 정리함으로써 프로그램은 요청 및 시스템 리소스를보다 효율적으로 관리하여 전반적인 성능을 향상시킬 수 있습니다.