현재 위치: > 최신 기사 목록> 공유 DNS가 효과적인지 모니터링하는 방법

공유 DNS가 효과적인지 모니터링하는 방법

M66 2025-05-31

네트워크 요청에 PHP를 사용할 때는 종종 CURL 라이브러리를 사용합니다. Curl은 간단한 HTTP 요청을 지원할뿐만 아니라 쿠키, DNS, SSL 등과 같은 고급 기능을 지원하는 강력한 도구입니다.

그중에서도 Curl_share_init 은 비교적 드문 컬 기능으로, DNS 캐시, 쿠키, SSL 세션 등과 같은 여러 컬 핸들이 데이터를 공유 할 수있는 비교적 드문 컬 기능입니다. DNS 캐시를 공유함으로써 중복 도메인 이름 해상도를 줄이고 성능을 향상시킬 수 있습니다.

그러나 실제로 사용하면 많은 사람들이 다음과 같이 묻습니다.
공유 DNS 캐시가 효과적입니까? 모니터링하는 방법?
이 기사는 단계별로 분석하고 완전한 PHP 예제를 제공합니다.

curl_share_init 란 무엇입니까?

curl_share_init () 함수는 공유 핸들을 초기화하는 데 사용됩니다. curl_setoptcurlopt_share 옵션과 함께 여러 CURL 요청이 특정 데이터를 공유 할 수 있습니다. 공통 공유 내용은 다음과 같습니다.

  • DNS 캐시 ( curl_lock_data_dns )

  • 쿠키 ( curl_lock_data_cookie )

  • ssl 세션 ( curl_lock_data_ssl_session )

예를 들어:

 $sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

이러한 방식으로, 다중 컬 핸들이 동일한 $ sh를 바인딩하고 DNS 캐시를 공유 할 수 있습니다.

DNS가 공유되는지 모니터링하는 방법은 무엇입니까?

Curl은 "DNS 캐시 hits 모니터"에 대한 인터페이스를 제공하지 않지만 간접적으로 다음을 볼 수 있습니다.

  1. 첫 번째 요청 시간 소모 : 첫 번째 요청에는 일반적으로 DNS 해상도 시간이 포함됩니다.

  2. 후속 요청에 대한 시간 소모 : 공유 DNS가 활성화 된 경우 동일한 도메인 이름에 대한 후속 요청은 해상도 시간을 크게 줄여야합니다.

다시 말해, Curlinfo_namelookup_timeCurlinfo_total_time을 사용하여 모니터링 할 수 있습니다.

  • 도메인 이름 해상도 시간

  • 총 시간 소비

첫 번째 요청의 namelookup_time 과 후속 요청을 비교하면 DNS 캐시가 유효한 지 여부를 결정할 수 있습니다.

완전한 샘플 코드

다음은 curl_share_init을 사용하여 완전한 PHP 코드를 사용하여 https://m66.net/test 에 두 개의 요청을 보내고 DNS 해상도 시간을 인쇄합니다.

 <?php
$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

$url = 'https://m66.net/test';

// 첫 번째 요청
$ch1 = curl_init($url);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_SHARE, $sh);

curl_exec($ch1);
$dns_time1 = curl_getinfo($ch1, CURLINFO_NAMELOOKUP_TIME);
$total_time1 = curl_getinfo($ch1, CURLINFO_TOTAL_TIME);
curl_close($ch1);

echo "첫 번째 요청:\n";
echo "DNS 분석 시간: {$dns_time1} 두번째\n";
echo "총 시간 소비: {$total_time1} 두번째\n";

// 기다리다1두번째,새로운 요청을 시뮬레이션합니다
sleep(1);

// 두 번째 요청
$ch2 = curl_init($url);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_SHARE, $sh);

curl_exec($ch2);
$dns_time2 = curl_getinfo($ch2, CURLINFO_NAMELOOKUP_TIME);
$total_time2 = curl_getinfo($ch2, CURLINFO_TOTAL_TIME);
curl_close($ch2);

echo "\n두 번째 요청:\n";
echo "DNS 분석 시간: {$dns_time2} 두번째\n";
echo "총 시간 소비: {$total_time2} 두번째\n";

// 정리
curl_share_close($sh);
?>

코드 키 분석

? 공유 활성화 : curl_share_initcurlshopt_share를 사용하여 공유 DNS 데이터를 구성하십시오.

? 시간을 가지십시오 : curl_getInfo를 통해 Curlinfo_namelookup_time을 얻으십시오.

? 비교 효과 : 첫 번째 요청은 일반적으로 명백한 DNS 시간 (예 : 수십 밀리 초); 두 번째로 캐시가 발효되면 Namelookup_time 은 0에 가깝습니다.

주목해야 할 것

  • 동일한 도메인 이름 : 동일한 호스트 이름 (예 : m66.net ) 만 캐시를 누를 수 있습니다.

  • PHP CURL 버전 : 일부 이전 버전의 PHP는 CURL_SHARE를 완전히 지원하지 않을 수 있습니다. CURL 버전을 확인하기 위해 phpinfo ()를 사용하는 것이 좋습니다.

  • 스레드 안전 : 멀티 스레드 또는 다중 프로세스 환경에서 Curl_Share를 사용하는 경우 잠금 보안을 보장해야합니다.