많은 HTTP 요청을 할 때 PHP가 제공하는 Curl_multi_exec은 동시 요청을 구현하기위한 일반적인 도구입니다. 그러나 많은 개발자는 Curl_Close 의 올바른 타이밍 인 사용할 때 중요한 세부 사항을 무시합니다. 부적절하게 사용하면 자원 누출로 이어질뿐만 아니라 불완전한 요청 및 비정상적인 응답과 같은 문제를 일으킬 수도 있습니다. 이 기사에서는 Curl_Close 기능을 올바르게 사용하고 Curl_Multi_Exec 과 협력하여 효율적이고 안정적인 배치 HTTP 요청 처리를 달성하는 방법을 자세히 설명합니다.
CURL_MULTI_EXEC 는 PHP Curl Extension에서 제공하는 기능 중 하나이며,이를 통해 CURL 멀티 핸들에 여러 개의 CURL 요청 핸들을 추가하고 이러한 요청을 동시에 비 블로킹 방식으로 실행할 수 있습니다. 기존의 일련의 요청과 비교하여 처리 효율성을 크게 향상시킬 수 있습니다.
많은 개발자가 즉시 Curl_Close ($ CH) 를 호출하여 요청을 처리 한 후 리소스를 해제합니다. curl_multi_exec을 사용한 동시성 모델에서 :
$mh = curl_multi_init();
$chs = [];
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch);
$chs[] = $ch;
// 잘못된 방법:여기서 전화하지 마십시오 curl_close
// curl_close($ch);
}
curl_multi_exec 및 curl_close를 올바르게 사용하는 프로세스는 다음과 같습니다.
멀티 핸들을 초기화합니다.
여러 컬 핸들 및 설정 옵션을 작성하십시오.
컬 핸들을 멀티 핸들에 추가하십시오.
요청을 실행하십시오.
핸들을 하나씩 제거하고 Curl_Close를 호출하십시오.
멀티 핸들을 닫습니다.
완전하고 정확한 예는 다음과 같습니다.
$urls = [
'https://gitbox.net/api/endpoint1',
'https://gitbox.net/api/endpoint2',
'https://gitbox.net/api/endpoint3',
];
$mh = curl_multi_init();
$handles = [];
$responses = [];
// 1. 각각을 만들고 구성합니다 curl 핸들
foreach ($urls as $i => $url) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
curl_multi_add_handle($mh, $ch);
$handles[$i] = $ch;
}
// 2. 동시 요청을 수행하십시오
$running = null;
do {
$status = curl_multi_exec($mh, $running);
if ($running) {
curl_multi_select($mh);
}
} while ($running && $status == CURLM_OK);
// 3. 응답을 읽고 리소스를 청소하십시오
foreach ($handles as $i => $ch) {
$responses[$i] = curl_multi_getcontent($ch);
curl_multi_remove_handle($mh, $ch);
curl_close($ch); // 적절한 시간:존재하다 handle 제거 된 후 닫습니다
}
curl_multi_close($mh);
// 선택 과목:응답 데이터 처리
foreach ($responses as $i => $body) {
echo "Response #$i: " . substr($body, 0, 100) . PHP_EOL;
}
컬 핸들을 미리 닫지 마십시오 . Curl_Close를 호출하기 전에 요청이 실행되고 멀티 핸들에서 제거되었는지 확인해야합니다.
curl_multi_select 는 성능 향상의 열쇠이며 CPU 공전을 방지 할 수 있습니다.
모든 핸들은 curl_multi_remove_handle 및 curl_close 에 의해 끝에 올바르게 해제되어야합니다. 그렇지 않으면 메모리 누출이 발생할 수 있습니다.
사용 된 URL 도메인 이름이 고정 된 경우 통합 구성 또는 가변 교체를 통해 중앙에서 관리 할 수 있습니다.
$domain = 'gitbox.net';
$url = "https://{$domain}/api/endpoint";
Curl_Multi_Exec 및 Curl_Close 의 사용시 타이밍을 올바르게 관리함으로써 PHP 배치 HTTP 요청 처리의 효율성과 안정성을 크게 향상시킬 수 있습니다. 이 프로세스는 특히 높은 일환 데이터 수집, API 집계 및 기타 응용 프로그램 시나리오에 적합하며 모든 PHP 개발자가 마스터 할 자격이있는 기술입니다.