Wenn Sie die Curl -Erweiterung von PHP verwenden, um große Mengen an HTTP -Anfragen zu erstellen, können Sie auf einen Leistungs Engpass stoßen: DNS -doppelte Auflösung. Jedes Mal, wenn Sie anfordern, muss die Curl den Domänennamen einmal analysieren, der zusätzliche Zeitaufwand bringen kann, insbesondere wenn Sie mehrere Anfragen an denselben Domain -Namen stellen. Glücklicherweise bietet PHP eine Funktion namens, die dieses Problem vermeiden kann, indem DNS -Cache geteilt wird. Dieser Artikel zeigt Ihnen, wie Sie ihn verwenden.
curl_share_init () ist eine Funktion, die von der Curl -Erweiterung bereitgestellt wird, um ein gemeinsam genutztes Handle zu erstellen. Dieses gemeinsame Griff kann spezifische Ressourcen zwischen mehreren Curl -Sitzungen wie DNS -Cache, Cookies, SSL -Sitzungen usw. teilen.
Wenn wir freigegebenen DNS -Cache aktivieren, müssen mehrere Anfragen nur einmal den Domänennamen auflösen, und nachfolgende Anforderungen können die Ergebnisse direkt wiederverwenden und die Netzwerklatenz erheblich verringern.
Verwenden wir einen einfachen Beispielcode, um zu erklären, wie Sie ihn verwenden:
<?php
// erstellen cURL Gemeinsamer Griff
$sh = curl_share_init();
// Stellen Sie die Freigabeoptionen fest,Aktivieren DNS geteilt
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
$urls = [
'https://m66.net/api/data1',
'https://m66.net/api/data2',
'https://m66.net/api/data3',
];
foreach ($urls as $url) {
$ch = curl_init();
// aufstellen URL und andere notwendige Optionen
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 绑定Gemeinsamer Griff
curl_setopt($ch, CURLOPT_SHARE, $sh);
// Eine Anfrage ausführen
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Fehler: ' . curl_error($ch) . PHP_EOL;
} else {
echo 'Antwort: ' . $response . PHP_EOL;
}
// Schließung cURL Sitzung
curl_close($ch);
}
// SchließungGemeinsamer Griff
curl_share_close($sh);
?>
1 ?? Erstellen Sie einen gemeinsam genutzten Griff <br> Wir verwenden curl_share_init () , um ein freigegebenes Griff $ sh zu erstellen.
2 ?? Stellen Sie gemeinsame Ressourcen fest <br> Mit curl_share_setopt () geben wir freigegebene DNS -Daten an ( curl_lock_data_dns ).
3 ?? Bindung eines gemeinsam genutzten Griffs in jeder Curl -Sitzung <br> Verwenden Sie in curl_setopt () curlopt_share , um den gemeinsam genutzten Handle mit dem aktuellen Curl -Handle $ CH zu verknüpfen.
4 ?? Schließen Sie den Griff <br> Denken Sie nach Abschluss aller Anfragen daran, curl_share_close () zu verwenden, um das gemeinsame Griff zu veröffentlichen.
Der gemeinsame Griff muss geschlossen werden, nachdem alle Anfragen abgeschlossen sind.
Wenn mehrere Themen oder gleichzeitige Anfragen gleichzeitig im Programm ausgeführt werden, müssen Sie darauf achten, Ressourcen zu sperren, um die Rennbedingungen zu verhindern.
Die gleiche Methode kann bei der Freigabe von Cookies, SSL und anderen Daten verwendet werden. Ersetzen Sie einfach die Konstante curl_lock_data_* .
Für Szenarien, die eine große Anzahl von Anforderungen an denselben Domänennamen wie API -Aggregation, Batch -Crawling und Lasttests beinhalten, kann die Vermeidung von DNS -Duplikatauflösung in der Regel 10% ~ 30% Leistungsverbesserung führen, abhängig von der DNS -Query -Geschwindigkeit und der Serverlatenz. Obwohl nicht jedes Szenario stark verbessert werden kann, ist es eine einfache, fast kostenlose Optimierungsmethode.