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.
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.
Obwohl Curl keine Schnittstelle zur "Überwachung von DNS -Cache -Treffern" bietet, können wir indirekt beobachten:
Erste Anfrage zeitaufwändig : Die erste Anfrage enthält normalerweise die DNS -Auflösungszeit.
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.
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);
?>
? 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.
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.