많은 API 요청이 필요한 PHP CLI 스크립트를 작성할 때, 자원의 합리적인 관리 및 성능 향상은 개발자가 무시할 수없는 문제가되었습니다. 특히 여러 HTTP 요청이 동시에 처리 해야하는 시나리오에서 CURL_SHARE_INIT () 와 같은 CURL에서 제공하는 일부 고급 기능은 연결을 재사용하고 어느 정도 자원을 공유하여 전체 실행 효율성을 향상시킬 수 있습니다. 이 기사는 CLI 스크립트에서 curl_share_init ()를 사용하여 여러 요청을 관리하는 방법에 대해 설명합니다.
curl_share_init () 는 공유 핸들을 초기화하기 위해 PHP가 제공하는 컬 함수입니다. 이 핸들을 사용하면 여러 컬 세션간에 DNS 캐시, SSL 세션, 쿠키 및 기타 리소스를 공유 할 수 있습니다.
curlshopt_share :
curl_lock_data_cookie : 공유 쿠키 데이터.
curl_lock_data_dns : 공유 DNS 캐시.
curl_lock_data_ssl_session : SSL 세션을 공유하십시오.
이러한 공유 옵션은 고주파수에서 동일한 호스트 또는 도메인 이름의 인터페이스를 요청할 때 특히 유용합니다.
여러 동시 요청 API를 시뮬레이션하고 CURL_SHARE_INIT ()를 사용하여 성능을 향상시키는 실제 PHP CLI 스크립트 예제를 살펴 보겠습니다.
<?php
$urls = [
"https://m66.net/api/endpoint1",
"https://m66.net/api/endpoint2",
"https://m66.net/api/endpoint3",
"https://m66.net/api/endpoint4"
];
// 공유 핸들을 초기화하십시오
$sh = curl_share_init();
// 공유 유형을 설정하십시오
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
$multiHandle = curl_multi_init();
$curlHandles = [];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SHARE => $sh,
CURLOPT_USERAGENT => "PHP-Curl-Client"
]);
curl_multi_add_handle($multiHandle, $ch);
$curlHandles[] = $ch;
}
// 다중 스레드 요청을 수행하십시오
$active = null;
do {
$mrc = curl_multi_exec($multiHandle, $active);
curl_multi_select($multiHandle);
} while ($active > 0);
// 처리 결과
foreach ($curlHandles as $ch) {
$response = curl_multi_getcontent($ch);
$info = curl_getinfo($ch);
echo "URL: " . $info['url'] . "\n";
echo "HTTP Code: " . $info['http_code'] . "\n";
echo "Response: " . substr($response, 0, 100) . "...\n\n";
curl_multi_remove_handle($multiHandle, $ch);
curl_close($ch);
}
// 리소스 정리
curl_share_close($sh);
curl_multi_close($multiHandle);
curl_share_init ()를 사용하면 다음과 같은 측면에서 특히 분명합니다.
DNS 캐시 재사용 <br> 요청할 때마다 도메인 이름을 다시 분리하지 말고 DNS 쿼리 시간을 저장하십시오.
SSL 세션 멀티플렉싱 <br> HTTPS 요청의 경우 멀티플렉싱 SSL 세션은 핸드 셰이크 대기 시간을 크게 줄일 수 있습니다.
쿠키 공유 <br> 로그인 상태, 추적 정보 등을 공유합니다. 요청의 일관성과 효과를 향상시키기위한 여러 요청 중.
메모리 사용 최적화 <br> 여러 연결은 일부 리소스를 공유하여 메모리 오버 헤드를 효과적으로 줄일 수 있습니다.
curl_share_init () 는 강력하지만 모든 시나리오가 사용하기에 적합한 것은 아닙니다. 권장되는 몇 가지 일반적인 시나리오는 다음과 같습니다.
벌크는 동일한 도메인 이름으로 여러 인터페이스를 요청합니다.
고주파 인터페이스 동기화는 CLI 도구에서 수행됩니다.
크롤러, 데이터 수집 등과 같은 백엔드 서비스 스크립트 등
웹 환경 (예 : FPM 모드)에서는 자원을 동시 프로세스간에 안전하게 공유 할 수 없기 때문에 공유 핸들을 사용하는 것이 좋습니다. 이는 충돌이나 오류로 이어질 수 있습니다.
PHP CLI 스크립트는 Curl_share_init ()를 합리적으로 사용하여 다중 요청 작업을보다 효율적으로 관리 할 수있어 실행 속도를 향상시킬뿐만 아니라 시스템 리소스도 절약 할 수 있습니다. 이것은 외부 API와의 자주 통신이 필요한 CLI 도구를위한 귀중한 최적화 방법입니다. 이러한 고급 컬 기술을 마스터하고 적용하면 고성능 PHP 스크립트를 구축 할 때 경쟁력이 크게 향상됩니다.