동시 PHP 응용 프로그램에서 동일한 도메인 이름에 대한 빈번한 네트워크 요청은 많은 DNS 쿼리로 이어질 수 있습니다. 이는 서버 측의 부담을 증가시킬뿐만 아니라 성능에 영향을 미칠 수도 있습니다. 다행히 Libcurl은 효율적인 솔루션 인 Curl_share_init () 함수를 제공합니다. 합리적으로 사용하면 DNS 캐시 공유를 구현하여 중복 DNS 쿼리를 줄이고 요청 효율성을 향상시킬 수 있습니다.
curl_share_init ()는 libcurl에서 공유 핸들 (CURL 공유 핸들)을 초기화하기 위해 제공하는 함수입니다. 이 공유 핸들을 통해 쿠키, DNS 캐시, SSL 세션 등과 같은 여러 컬 세션간에 데이터를 공유 할 수 있습니다. 특히 DNS 캐시 공유는 동일한 도메인 이름의 성능을 향상시키는 데 큰 의미가 있습니다.
기본적으로 CURL을 사용하여 요청을 시작할 때마다 도메인 이름을 해결하기 위해 DNS 쿼리가 수행됩니다. 예를 들어:
$ch = curl_init('https://m66.net/api/data');
curl_exec($ch);
curl_close($ch);
위의 요청이 루프에서 반복적으로 실행되면 DNS 쿼리가 매번 트리거되어 특히 단기간에 자주 요청 될 때 불필요한 성능 오버 헤드가 발생하면이 반복 된 해상도는 네트워크 대기 시간 및 서버 압력을 크게 증가시킵니다.
DNS 캐시를 공유함으로써 여러 컬 핸들 사이에서 해결 된 도메인 이름을 재사용하여 중복 쿼리를 피할 수 있습니다.
다음은 Curl_share_init ()를 사용하여 DNS 캐시를 공유하는 방법을 보여주는 예입니다.
$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
for ($i = 0; $i < 10; $i++) {
$ch = curl_init('https://m66.net/api/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SHARE, $sh);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error: ' . curl_error($ch) . PHP_EOL;
}
curl_close($ch);
}
curl_share_close($sh);
curl_share_init () : 공유 핸들을 초기화합니다.
curl_share_setopt () : 공유 컨텐츠를 DNS 캐시로 설정하십시오.
curl_setopt ($ ch, curlopt_share, $ sh) : 공유 핸들을 각 컬 요청에 바인딩하십시오.
curl_share_close ($ sh) : 사용 후 리소스를 해제하십시오.
이러한 방식으로 모든 CURL 요청은 루프에서 동일한 DNS 캐시를 공유하여 각 요청에 대한 도메인 이름 해상도를 피하여 효율성을 크게 향상시킵니다.
공유 핸들은 스레드 (예 : 멀티 스레드 환경)에서 사용할 수 없습니다.
요청에 여러 도메인 이름이 포함 된 경우 동일한 도메인 이름에 대한 요청 만 DNS 캐싱의 이점을 누릴 수 있습니다.
메모리 누출을 피하려면 공유 리소스를 올바르게 닫아야합니다.
DNS 쿼리를 최적화하면 고주파 네트워크 요청을 처리 할 때 성능이 크게 향상 될 수 있습니다. PHP는 CURL EXTENSION을 사용하여 CURL_SHARE_INIT ()를 호출하고 간단하고 효율적인 최적화 방법 인 DNS 캐시를 공유합니다. 이는 고성능 요구 사항을 지향하는 응용 프로그램을 위해 시도 할 가치가있는 트릭입니다. 올바르게 배치하고 사용하면 서버의 DNS 압력을 크게 줄이고 전반적인 네트워크 응답 속도를 향상시킬 수 있습니다.