Aktueller Standort: Startseite> Neueste Artikel> Wie vermeiden Sie eine wiederholte DNS -Auflösung, indem Sie die Funktion curl_share_init () verwenden, um die Leistung zu verbessern?

Wie vermeiden Sie eine wiederholte DNS -Auflösung, indem Sie die Funktion curl_share_init () verwenden, um die Leistung zu verbessern?

M66 2025-06-23

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.

Was ist curl_share_init ()?

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.

Zu verwendende Schritte

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);
?>

Code Erläuterung

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.

Dinge zu beachten

  • 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_* .

Wie viel Leistungsverbesserung ist?

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.