현재 위치: > 최신 기사 목록> curl_share_init ()를 사용하여 대규모 API 크롤링 작업 최적화

curl_share_init ()를 사용하여 대규모 API 크롤링 작업 최적화

M66 2025-05-28

대규모 API 크롤링 작업을 수행 할 때 성능 최적화가 중요합니다. PHP 및 CURL을 사용하는 개발자의 경우 Curl_share_init () 의 합리적인 사용은 시스템 자원 소비를 크게 줄이고 효율성을 향상시킬 수 있습니다. 이 기사는 기능, 사용 시나리오 및 코드에서 올바르게 구현하는 방법에 대해 자세히 소개합니다.

curl_share_init () 란 무엇입니까?

Curl_share_init ()는 공유 핸들 (CURL 공유 핸들)을 초기화하기 위해 PHP Curl Extension에서 제공하는 함수입니다. 핸들을 공유하면 DNS 캐시, SSL 세션 캐시, 쿠키 등과 같은 리소스를 공유 할 수 있습니다. 여러 컬 핸들 사이에 반복적 인 연결을 피하거나 도메인 이름의 반복적 인 해상도를 피하여 여러 동의 요청의 성능을 크게 향상시킬 수 있습니다.

요컨대,이 기능의 핵심 기능은 "자원 공유 및 중복 작업을 줄입니다"입니다.

시나리오를 사용하십시오

예를 들어 수백 또는 수천 개의 HTTP 요청을 동시에 작성 해야하는 경우.

  • 큰 REST API 데이터베이스를 크롤링하십시오.

  • 여러 타사 데이터 소스를 정기적으로 동기화합니다.

  • 동시성이 높은 동일한 API 엔드 포인트에 액세스하십시오.

각 요청이 DNS 쿼리와 SSL 핸드 셰이크를 개별적으로 설정하면 성능이 큰 폐기물을 유발할 수 있습니다. curl_share_init ()를 사용하면 이러한 요청이 부분 캐시를 공유하여 오버 헤드를 줄일 수 있습니다.

기본 사용 예제

다음은 curl_share_init ()를 사용하여 대규모 API 크롤링 작업을 최적화하기위한 샘플 코드입니다.

 <?php

// 공유 핸들을 초기화하십시오
$sh = curl_share_init();

// 공유 리소스 유형을 설정하십시오,우리는 여기서 공유합니다 DNS 그리고 Cookie
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);

$urls = [
    'https://m66.net/api/data1',
    'https://m66.net/api/data2',
    'https://m66.net/api/data3',
    // 계속 더 추가 할 수 있습니다 API 주소
];

$multiHandle = curl_multi_init();
$curlHandles = [];

// 각각 초기화하십시오 cURL easy 핸들
foreach ($urls as $i => $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 绑定共享핸들
    curl_setopt($ch, CURLOPT_SHARE, $sh);
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[$i] = $ch;
}

// 동시 요청을 수행하십시오
$running = null;
do {
    curl_multi_exec($multiHandle, $running);
    curl_multi_select($multiHandle);
} while ($running > 0);

// 결과를 얻으십시오
foreach ($curlHandles as $i => $ch) {
    $response = curl_multi_getcontent($ch);
    echo "Response from {$urls[$i]}:\n";
    echo $response . "\n";
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// 자원을 자유롭게합니다
curl_share_close($sh);
curl_multi_close($multiHandle);

핵심 요점

  1. 공유 리소스 설정 <br> Curl_share_setopt ()를 사용하여 공유 리소스 유형을 지정하는 데 일반적으로 사용됩니다.

    • curl_lock_data_dns : 공유 DNS 캐시.

    • curl_lock_data_cookie : 공유 쿠키.

    • curl_lock_data_ssl_session : SSL 세션을 공유하십시오.

  2. 프로세스에서 공유하지 마십시오
    컬 공유 핸들은 동일한 프로세스에만 적용됩니다. 다중 프로세스 크롤링에는 다른 메커니즘 (예 : 외부 캐시 또는 데이터베이스)을 사용해야합니다.

  3. 자원을 올바르게 해제 <br> 크롤링 작업이 끝나면 메모리 누출을 피하기 위해 Curl_Share_Close () 및 Curl_Multi_Close ( )에게 전화하십시오.

성능 이점

DNS 및 SSL 세션 공유를 활성화하면 다음을 피할 수 있습니다.

  • 동일한 도메인 이름을 반복하십시오 (특히 동일한 도메인의 많은 요청에 대해).

  • SSL 핸드 셰이크 (특히 HTTPS 요청)를 반복하십시오.

실제 테스트에서 수백 개의 동시 요청에 대해이 최적화는 CPU 및 네트워크로드를 크게 줄이고 전체 처리량을 향상시킬 수 있습니다.