현재 위치: > 최신 기사 목록> CLI 스크립트에서 curl_share_init ()를 사용하여 여러 API 요청을 관리합니다.

CLI 스크립트에서 curl_share_init ()를 사용하여 여러 API 요청을 관리합니다.

M66 2025-05-18

많은 API 요청이 필요한 PHP CLI 스크립트를 작성할 때, 자원의 합리적인 관리 및 성능 향상은 개발자가 무시할 수없는 문제가되었습니다. 특히 여러 HTTP 요청이 동시에 처리 해야하는 시나리오에서 CURL_SHARE_INIT () 와 같은 CURL에서 제공하는 일부 고급 기능은 연결을 재사용하고 어느 정도 자원을 공유하여 전체 실행 효율성을 향상시킬 수 있습니다. 이 기사는 CLI 스크립트에서 curl_share_init ()를 사용하여 여러 요청을 관리하는 방법에 대해 설명합니다.

1. 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 세션을 공유하십시오.

이러한 공유 옵션은 고주파수에서 동일한 호스트 또는 도메인 이름의 인터페이스를 요청할 때 특히 유용합니다.

2. Curl_share_init ()를 사용하는 기본 단계

여러 동시 요청 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);

3. 성능 비교 및 ​​리소스 최적화

curl_share_init ()를 사용하면 다음과 같은 측면에서 특히 분명합니다.

  1. DNS 캐시 재사용 <br> 요청할 때마다 도메인 이름을 다시 분리하지 말고 DNS 쿼리 시간을 저장하십시오.

  2. SSL 세션 멀티플렉싱 <br> HTTPS 요청의 경우 멀티플렉싱 SSL 세션은 핸드 셰이크 대기 시간을 크게 줄일 수 있습니다.

  3. 쿠키 공유 <br> 로그인 상태, 추적 정보 등을 공유합니다. 요청의 일관성과 효과를 향상시키기위한 여러 요청 중.

  4. 메모리 사용 최적화 <br> 여러 연결은 일부 리소스를 공유하여 메모리 오버 헤드를 효과적으로 줄일 수 있습니다.

4. 사용 제안

curl_share_init () 는 강력하지만 모든 시나리오가 사용하기에 적합한 것은 아닙니다. 권장되는 몇 가지 일반적인 시나리오는 다음과 같습니다.

  • 벌크는 동일한 도메인 이름으로 여러 인터페이스를 요청합니다.

  • 고주파 인터페이스 동기화는 CLI 도구에서 수행됩니다.

  • 크롤러, 데이터 수집 등과 같은 백엔드 서비스 스크립트 등

웹 환경 (예 : FPM 모드)에서는 자원을 동시 프로세스간에 안전하게 공유 할 수 없기 때문에 공유 핸들을 사용하는 것이 좋습니다. 이는 충돌이나 오류로 이어질 수 있습니다.

결론

PHP CLI 스크립트는 Curl_share_init ()를 합리적으로 사용하여 다중 요청 작업을보다 효율적으로 관리 할 수있어 실행 속도를 향상시킬뿐만 아니라 시스템 리소스도 절약 할 수 있습니다. 이것은 외부 API와의 자주 통신이 필요한 CLI 도구를위한 귀중한 최적화 방법입니다. 이러한 고급 컬 기술을 마스터하고 적용하면 고성능 PHP 스크립트를 구축 할 때 경쟁력이 크게 향상됩니다.