Position actuelle: Accueil> Derniers articles> Comment surveiller si le DNS partagé est efficace

Comment surveiller si le DNS partagé est efficace

M66 2025-05-31

Lorsque nous utilisons PHP pour les demandes de réseau, nous utilisons souvent la bibliothèque Curl. Curl est un outil puissant qui ne prend pas seulement en charge les demandes HTTP simples, mais prend également en charge des fonctionnalités avancées telles que les cookies, DNS, SSL, etc.

Parmi eux, Curl_Share_Init est une fonctionnalité Curl relativement rare, qui permet à plusieurs poignées de curl de partager des données, telles que le cache DNS, les cookies, la session SSL, etc. En partageant le cache DNS, nous pouvons réduire la résolution du nom de domaine en double et améliorer les performances.

Mais dans une utilisation réelle, de nombreuses personnes demanderont:
Le cache DNS partagé est-il efficace? Comment le surveiller?
Cet article vous amènera à analyser étape par étape et donner un exemple de PHP complet.

Qu'est-ce que curl_share_init ?

La fonction curl_share_init () est utilisée pour initialiser une poignée partagée. En conjonction avec l'option Curlopt_share de Curl_Setopt , il permet à plusieurs demandes Curl de partager certaines données. Les contenus communs communs comprennent:

  • Cache dns ( curl_lock_data_dns )

  • Cookie ( curl_lock_data_cookie )

  • SSL SESSION ( CURL_LOCK_DATA_SSL_SESSION )

Par exemple:

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

De cette façon, plusieurs poignées de curl lient le même $ sh , et le cache DNS peut être partagé.

Comment surveiller si DNS est partagé?

Bien que Curl ne fournisse pas d'interface pour "surveiller les coups de cache DNS", nous pouvons observer indirectement:

  1. Première demande prenant du temps : la première demande contient généralement du temps de résolution DNS.

  2. Le temps qui prend du temps pour les demandes ultérieures : si le DNS partagé est activé, les demandes ultérieures pour le même nom de domaine devraient réduire considérablement le temps de résolution.

En d'autres termes, nous pouvons utiliser Curlinfo_NameLookup_time et Curlinfo_Total_time pour surveiller:

  • Temps de résolution de noms de domaine

  • Consommation de temps totale

En comparant le namelookup_time de la première demande et la demande suivante, vous pouvez déterminer si le cache DNS est en vigueur.

Exemple de code complet

Voici un code PHP complet à l'aide de Curl_share_Init , en envoyant deux demandes à https://m66.net/test , et en imprimant le temps de résolution DNS:

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

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

// Première demande
$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 "Première demande:\n";
echo "DNS Temps d&#39;analyse: {$dns_time1} Deuxième\n";
echo "Consommation de temps totale: {$total_time1} Deuxième\n";

// attendez1Deuxième,Simuler de nouvelles demandes
sleep(1);

// Deuxième demande
$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 "\nDeuxième demande:\n";
echo "DNS Temps d&#39;analyse: {$dns_time2} Deuxième\n";
echo "Consommation de temps totale: {$total_time2} Deuxième\n";

// Nettoyer
curl_share_close($sh);
?>

Analyse clé du code

? Activer le partage : utilisez curl_share_init et curlshopt_share pour configurer les données DNS partagées.

? Obtenez le temps : obtenez Curlinfo_Namelookup_time via Curl_getInfo .

? Effet comparatif : la première demande a généralement un temps DNS évident (comme des dizaines de millisecondes); La deuxième fois que si le cache prend effet, NameLookUp_time sera proche de 0.

Choses à noter

  • Même nom de domaine : seul le même nom d'hôte (tel que m66.net ) peut appuyer sur le cache.

  • PHP Curl Version : Certaines versions plus anciennes de PHP peuvent ne pas prendre en charge entièrement Curl_share . Il est recommandé d'utiliser phpinfo () pour vérifier la version Curl.

  • Sécurité du thread : Si vous utilisez Curl_share dans un environnement multithread ou multi-processus, vous devez assurer la sécurité de verrouillage.