개발 중에는 종종 여러 서버 또는 API에 HTTP 요청을 시작해야합니다. 기존의 단일 스레딩 방법에 따라 하나씩 요청하면 느리게뿐만 아니라 서버 리소스도 낭비됩니다. PHP는 CURL_MULTI_EXEC 및 CURL_MULTI_CLOSE 기능을 통해 다중 요청 동시 처리를 구현하여 효율성을 크게 향상시킬 수있는 CURL EXTENSION을 제공합니다.
이 기사는 효율적인 동시성 처리를 위해 Curl_Multi_Close 와 결합 된 Curl_Exec을 사용하는 방법을 자세히 소개하고 특정 예제 코드를 제공합니다.
curl_exec () : 단일 컬 요청을 실행합니다.
curl_multi_exec () : 여러 컬 핸들을 동시에 실행합니다.
curl_multi_close () : 컬 배치 핸들을 닫고 리소스를 해제하십시오.
많은 요청을 동시에 처리 해야하는 경우 각 요청에 대해 Curl_Exec을 별도로 호출하는 대신 Curl_Multi_Exec을 사용하는 것이 좋습니다. curl_multi_close는 모든 요청이 처리 된 후 리소스를 정리하는 중요한 단계입니다.
다음은 여러 인터페이스를 동시에 요청하고 응답을 처리하는 방법을 보여주는 간단한 예입니다.
<?php
// 요청합니다URL목록
$urls = [
"https://gitbox.net/api/data1",
"https://gitbox.net/api/data2",
"https://gitbox.net/api/data3",
];
// 다중 초기화cURL핸들
$multiHandle = curl_multi_init();
$curlHandles = [];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[] = $ch;
}
// 모든 요청을 수행하십시오
$running = null;
do {
$status = curl_multi_exec($multiHandle, $running);
if ($status > 0) {
// 오류가 발생했습니다
echo "cURL error: " . curl_multi_strerror($status);
break;
}
// 활성 연결을 기다리고 있습니다
curl_multi_select($multiHandle);
} while ($running > 0);
// 각 요청의 응답을 처리하십시오
foreach ($curlHandles as $ch) {
$response = curl_multi_getcontent($ch);
$info = curl_getinfo($ch);
if (curl_errno($ch)) {
echo 'Request Error: ' . curl_error($ch) . PHP_EOL;
} else {
echo 'HTTP Code: ' . $info['http_code'] . PHP_EOL;
echo 'Response: ' . $response . PHP_EOL;
}
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
// 폐쇄multi handle
curl_multi_close($multiHandle);
?>
먼저 curl_multi_init () 를 통해 멀티 핸들을 만듭니다.
각 컬을 별도로 설정 한 후 Curl_multi_add_handle ()을 통해 멀티 핸들에 추가하십시오.
curl_multi_exec ()를 사용하여 모든 요청을 실행하고 모든 요청이 완료 될 때까지 폴링합니다.
curl_multi_select ()는 CPU 유명을 줄이고 효율성을 향상시킬 수 있습니다.
요청이 완료되면 Curl_Multi_GetContent ()를 사용하여 응답 내용을 얻으십시오.
마지막으로 Curl_Multi_Remove_handle ()을 사용하여 핸들을 제거하고 Curl_Multi_Close () 로 멀티 핸들을 닫으려면 리소스를 확보해야합니다.
동시 수 : 일회성 요청에 대해 너무 많은 URL이있는 경우 너무 많은 리소스를 소비하지 않기 위해 한 번에 10 개의 요청 만 전송되는 등 배치로 처리하는 것이 좋습니다.
타임 아웃 처리 : Curlopt_Timeout 또는 CurlOpt_ConnectTimeout은 일부 요청의 장기간 교수형을 피하기 위해 설정할 수 있습니다.
오류 처리 : curl_errno () 및 curl_error ()를 사용하여 단일 요청에 오류가 없는지 확인하십시오.
연결 재사용 : Curlopt_Forbid_Reuse를 켜면 빈번한 TCP 연결 생성을 피하고 성능을 향상시킬 수 있습니다.
curl_exec 과 curl_multi_close를 결합함으로써 PHP에서 많은 수의 HTTP 동시 요청을 효율적으로 처리 할 수 있습니다. 이 메소드는 전체 요청 시간을 단축 할뿐만 아니라 서버의 동시성 기능을 최대한 활용합니다. 고성능 PHP 응용 프로그램을 구축하는 데 필수적인 기술 중 하나입니다.
이러한 기본 사항을 마스터하면 PHP 응용 프로그램을 더 빠르고 안정적으로 실행할 수 있습니다!