PHP에서는 HTTP 요청에 CURL을 사용하는 것이 매우 일반적입니다. 특히 요청이 여러 외부 서비스로 전송되어야 할 때 CURL 은이 기능을 구현하는 매우 강력한 방법을 제공합니다. 그러나 기본적으로 Curl 은 동기 요청, 즉 요청이 전송 될 때마다 PHP는 다음 요청을 계속 처리하기 전에 요청이 완료 될 때까지 기다립니다.
그러나 동시에 여러 서비스에 요청을 보내야 할 때이 동기화 된 접근 방식은 특히 요청 수가 많은 경우 상당한 성능 병목 현상을 초래할 수 있습니다. 요청의 동시 실행 효율을 향상시키기 위해 Curl_multi_* 함수 그룹을 사용할 수 있습니다. 가장 중요한 기능 중 하나는 Curl_multi_Close 입니다.
Curl_multi_Close 는 PHP의 CURL Multi-Request 라이브러리의 일부로 컬 핸들을 닫고 리소스를 해방시킵니다. 일반적으로 Curl_multi_exec을 사용하여 여러 동시 요청을 수행 한 후에 사용됩니다. 이러한 방식으로, 다중 동시 요청의 수명주기는보다 효율적으로 관리 될 수 있으므로 특히 여러 네트워크 요청을 처리 할 때 성능을 향상시킬 수 있습니다.
요청 해야하는 여러 URL이 있다고 가정하면 Curl_multi_* 함수를 통해 이러한 요청을 동시에 실행할 수 있습니다. 다음은 curl_multi_close를 사용하여 요청 동시성의 효율성을 향상시키는 PHP 샘플 코드입니다.
<?php
// 여러 요청을 초기화합니다 cURL 핸들
$urls = [
"http://gitbox.net/api/endpoint1",
"http://gitbox.net/api/endpoint2",
"http://gitbox.net/api/endpoint3",
"http://gitbox.net/api/endpoint4"
];
$multiHandle = curl_multi_init();
$curlHandles = [];
// 각각에 대해 URL 별도를 만듭니다 cURL 핸들
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[] = $ch;
}
// 모든 요청을 수행하십시오
$running = null;
do {
curl_multi_exec($multiHandle, $running);
curl_multi_select($multiHandle); // 요청이 완료되기를 기다리십시오
} while ($running);
// 응답 내용을 얻으십시오
foreach ($curlHandles as $ch) {
$response = curl_multi_getcontent($ch);
echo $response . "\n"; // 출력 응답 내용
}
// 폐쇄 cURL 핸들
foreach ($curlHandles as $ch) {
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
// 리소스를 자유롭게합니다
curl_multi_close($multiHandle);
?>
컬 핸들 초기화 : 먼저 각 URL에 대한 별도의 컬 핸들을 생성 하여이 핸들을 여러 컬 세션에 추가합니다.
동시 요청 실행 : 모든 요청은 curl_multi_exec을 통해 비동기 적으로 실행됩니다. 모든 요청이 완료 될 때까지 지속적으로 실행됩니다. curl_multi_select는 프로그램이 요청이 완료 될 때까지 대기하여 전체 프로세스를 차단하지 않습니다.
응답 데이터 가져 오기 : 모든 요청이 완료된 후 Curl_multi_getContent를 통해 각 요청의 응답 내용을 가져옵니다.
닫고 청소 : 마지막으로 각 개별 컬 핸들을 제거하고 닫은 다음 Curl_Multi_Close를 사용하여 여러 컬 세션 핸들의 리소스를 해제하십시오.
curl_multi_close는 핸들을 여러 세션으로 닫을뿐만 아니라 모든 컬 리소스가 올바르게 해제되도록합니다. 장기 실행 스크립트에서 Curl_multi_Close 의 합리적인 사용은 메모리 누출을 효과적으로 방지하고 프로그램 안정성을 향상시킬 수 있습니다.
동시 실행 : 기존의 동기 요청은 순차적으로 실행되는 반면 Curl_Multi_* 함수는 여러 요청을 병렬로 실행할 수 있도록하여 특히 여러 다른 URL로 요청을 전송해야 할 때 실행 효율성을 크게 향상시킵니다.
비 블로킹 I/O : Curl_Multi_Select 및 Curl_Multi_Exec 의 협력을 통해 PHP는 응답 요청을 기다리는 동안 다른 요청을 계속 처리하고 차단 및 대기 문제를 피할 수 있습니다.
리소스 릴리스 : Curl_Multi_Close를 합리적으로 사용하면 요청이 완료된 후에 자원이 제 시간에 해제 될 수 있으며 메모리 누출 및 기타 문제를 피할 수 있습니다.
curl_multi_close는 여러 HTTP 요청의 동시 실행에 중요한 역할을합니다. PHP 개발자는 Curl_Multi_Exec 및 Curl_Multi_Close의 합리적으로 사용하면 여러 요청을 처리 할 때 응용 프로그램의 효율성을 크게 향상시키고 리소스를 효과적으로 관리 할 수 있습니다. 높은 동시 요청이 필요한 시나리오의 경우 CURL 의 다중 처리 기능을 사용하는 것이 매우 효과적인 최적화 방법입니다.