현재 위치: > 최신 기사 목록> Curl_share_init () 함수를 사용하여 성능을 향상시켜 반복 된 DNS 해상도를 피하는 방법은 무엇입니까?

Curl_share_init () 함수를 사용하여 성능을 향상시켜 반복 된 DNS 해상도를 피하는 방법은 무엇입니까?

M66 2025-06-23

PHP의 컬 확장을 사용하여 대량의 HTTP 요청을 할 때 성능 병목 현상 : DNS 중복 해상도가 발생할 수 있습니다. 요청할 때마다 컬은 도메인 이름을 한 번 구문 분석해야하므로 특히 동일한 도메인 이름으로 여러 요청을 할 때 추가 시간을 오버 헤드로 가져올 수 있습니다. 다행히도 PHP는 DNS 캐시를 공유 하여이 문제를 피할 수있는 함수를 제공합니다. 이 기사에서는 사용 방법을 보여줍니다.

curl_share_init () 란 무엇입니까?

curl_share_init ()는 공유 핸들을 생성하기 위해 CURL Extension에서 제공하는 함수입니다. 이 공유 핸들은 DNS 캐시, 쿠키, SSL 세션 등과 같은 여러 컬 세션간에 특정 리소스를 공유 할 수 있습니다.
공유 DNS 캐시를 활성화하면 여러 요청은 도메인 이름을 한 번만 해결하면됩니다. 후속 요청은 결과를 직접 재사용하여 네트워크 대기 시간을 크게 줄일 수 있습니다.

사용할 단계

간단한 예제 코드를 사용하여 사용 방법을 설명하겠습니다.

 <?php
// 만들다 cURL 공유 핸들
$sh = curl_share_init();

// 공유 옵션을 설정하십시오,할 수 있게 하다 DNS 공유
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

$urls = [
    'https://m66.net/api/data1',
    'https://m66.net/api/data2',
    'https://m66.net/api/data3',
];

foreach ($urls as $url) {
    $ch = curl_init();

    // 설정 URL 그리고 다른 필요한 옵션
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // 绑定공유 핸들
    curl_setopt($ch, CURLOPT_SHARE, $sh);

    // 요청을 실행하십시오
    $response = curl_exec($ch);

    if (curl_errno($ch)) {
        echo '실수: ' . curl_error($ch) . PHP_EOL;
    } else {
        echo '응답: ' . $response . PHP_EOL;
    }

    // 폐쇄 cURL 세션
    curl_close($ch);
}

// 폐쇄공유 핸들
curl_share_close($sh);
?>

코드 설명

1 ??? 공유 핸들을 만듭니다 <br> 우리는 curl_share_init ()를 사용하여 공유 핸들 $ sh를 만듭니다.

2 ?? 공유 자원을 설정하십시오 <br> curl_share_setopt ()를 사용하여 공유 DNS 데이터 ( Curl_Lock_Data_dns )를 지정합니다.

3 ???? 각 컬 세션에서 공유 핸들을 바인딩 <br> curl_setopt () 에서 curlopt_share를 사용하여 공유 핸들을 현재 컬 핸들 $ ch 에 연결하십시오.

4 ?? 손잡이를 닫습니다 <br> 모든 요청을 완료 한 후 curl_share_close ()를 사용하여 공유 핸들을 해제해야합니다.

주목해야 할 것

  • 모든 요청이 완료된 후에 공유 핸들을 닫아야합니다.

  • 프로그램에서 여러 스레드 또는 동시 요청이 동시에 실행되는 경우 레이스 조건을 방지하기 위해 자원을 잠그는 데주의해야합니다.

  • 쿠키, SSL 및 기타 데이터를 공유 할 때 동일한 방법을 사용할 수 있으며 Curl_Lock_Data_* 상수를 교체하십시오.

성능 향상은 얼마입니까?

API 집계, 배치 크롤링 및로드 테스트와 같은 동일한 도메인 이름에 대한 많은 요청과 관련된 시나리오의 경우 DNS 중복 해상도를 피하면 DNS 쿼리 속도 및 서버 대기 시간에 따라 DNS 중복 해상도를 피하면 일반적으로 약 10% ~ 30%의 성능 향상이 발생할 수 있습니다. 모든 시나리오를 크게 향상시킬 수는 없지만 간단하고 거의 비용이없는 최적화 방법입니다.