Aktueller Standort: Startseite> Neueste Artikel> So überwachen Sie, ob gemeinsame DNS effektiv ist

So überwachen Sie, ob gemeinsame DNS effektiv ist

M66 2025-05-31

Bei Verwendung von PHP für Netzwerkanforderungen verwenden wir häufig die Curl -Bibliothek. Curl ist ein leistungsstarkes Tool, das nicht nur einfache HTTP -Anforderungen unterstützt, sondern auch erweiterte Funktionen wie Cookies, DNS, SSL usw. unterstützt.

Unter ihnen ist Curl_Share_init eine relativ seltene Curl -Funktion, mit der mehrere Curl -Handles Daten wie DNS -Cache, Cookies, SSL -Sitzung usw. teilen können. Durch das Teilen von DNS -Cache können wir die Auflösung des doppelten Domänennamens reduzieren und die Leistung verbessern.

Aber im tatsächlichen Gebrauch werden viele Menschen fragen:
Ist der gemeinsame DNS -Cache wirksam? Wie kann man es überwachen?
In diesem Artikel werden Sie Schritt für Schritt analysieren und ein vollständiges PHP -Beispiel geben.

Was ist curl_share_init ?

Die Funktion curl_share_init () wird verwendet, um einen gemeinsam genutzten Griff zu initialisieren. In Verbindung mit der Option curlopt_share von curl_setopt ermöglicht es mehrere Curl -Anforderungen, bestimmte Daten zu teilen. Gemeinsame Inhaltsinhalte umfassen:

  • DNS Cache ( curl_lock_data_dns )

  • Cookie ( curl_lock_data_cookie )

  • SSL Session ( curl_lock_data_ssl_sesion )

Zum Beispiel:

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

Auf diese Weise binden mehrere Curl -Handles das gleiche $ sh und der DNS -Cache kann geteilt werden.

Wie kann man überwachen, ob DNS geteilt wird?

Obwohl Curl keine Schnittstelle zur "Überwachung von DNS -Cache -Treffern" bietet, können wir indirekt beobachten:

  1. Erste Anfrage zeitaufwändig : Die erste Anfrage enthält normalerweise die DNS -Auflösungszeit.

  2. Zeitaufwändig für nachfolgende Anfragen : Wenn freigegebener DNS aktiviert ist, sollten nachfolgende Anforderungen für denselben Domänennamen die Auflösungszeit erheblich verkürzen.

Mit anderen Worten können wir Curlinfo_Namelookup_time und Curlinfo_Total_Time verwenden, um zu überwachen:

  • Domain -Namensauflösungzeit

  • Gesamtzeitverbrauch

Durch den Vergleich der namelookup_time der ersten Anfrage und der nachfolgenden Anfrage können Sie feststellen, ob der DNS -Cache in Kraft ist.

Vollständiger Beispielcode

Hier ist ein vollständiger PHP -Code mit Curl_Share_init , der zwei Anfragen an https://m66.net/test sendet und die DNS -Auflösungszeit druckt:

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

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

// Erste Anfrage
$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 "Erste Anfrage:\n";
echo "DNS Analysezeit: {$dns_time1} Zweite\n";
echo "Gesamtzeitverbrauch: {$total_time1} Zweite\n";

// Warten1Zweite,Neue Anfragen simulieren
sleep(1);

// Zweite Anfrage
$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 "\nZweite Anfrage:\n";
echo "DNS Analysezeit: {$dns_time2} Zweite\n";
echo "Gesamtzeitverbrauch: {$total_time2} Zweite\n";

// Aufräumen
curl_share_close($sh);
?>

Codeschlüsselanalyse

? Teilen aktivieren : Verwenden Sie curl_share_init und curlshopt_share, um freigegebene DNS -Daten zu konfigurieren.

? Holen Sie sich Zeit : Holen Sie sich Curlinfo_Namelookup_time über curl_getInfo .

? Vergleichseffekt : Die erste Anfrage hat normalerweise eine offensichtliche DNS -Zeit (z. B. Dutzende von Millisekunden); Das zweite Mal, wenn der Cache wirksam wird, liegt Namelookup_time in der Nähe von 0.

Dinge zu beachten

  • Gleicher Domänenname : Nur der gleiche Hostname (wie M66.net ) kann auf den Cache klicken.

  • PHP CURL -Version : Einige ältere Versionen von PHP unterstützen möglicherweise nicht vollständig curl_share . Es wird empfohlen, Phpinfo () zu verwenden, um die Curl -Version zu überprüfen.

  • Gewindesicherheit : Wenn Sie Curl_Share in einer Umgebung mit mehreren Threads oder Multi-Process verwenden, müssen Sie die Sicherheit der Sperrung sicherstellen.