Aktueller Standort: Startseite> Neueste Artikel> Reduzieren Sie HTTPS -Handschlag über uns mit gemeinsamen Griffen

Reduzieren Sie HTTPS -Handschlag über uns mit gemeinsamen Griffen

M66 2025-05-27

Bei der Verwendung von PHP für hohe gleichzeitige Netzwerkanforderungen ist der Overhead von HTTPS -Handshake häufig einer der Leistungsengpässe. Jede HTTPS -Anforderung erfordert einen vollständigen TLS -Handshake -Prozess, der die Gesamtantwortgeschwindigkeit stark beeinflusst, wenn mehrere Anforderungen in kurzer Zeit eingeleitet werden. Glücklicherweise bietet Curl die Funktion curl_share_init , die die Verbindungsdaten zwischen mehreren Anforderungen durch Freigabe von Handles multiplexen Daten multiplexen und damit die Häufigkeit von HTTPS -Handshakes und die Verbesserung der Effizienz verringern kann.

Was ist curl_share_init ?

curl_share_init ist eine Funktion in der Curl -Erweiterung, mit der ein gemeinsam genutzter Griff initialisiert wird. Durch dieses gemeinsame Griff können unterschiedliche Curl -Sitzungen Informationen wie DNS -Cache, SSL -Sitzung, Cookies usw. freigeben. Wenn mehrere Anfragen auf denselben Domänennamen und gemeinsam genutzte SSL -Sitzungen hinweisen, können die Anfragen den vorherigen HTTPS -Handshake wiederverwenden, den Latenz und den CPU -Konsum stark reduzieren.

Beispiel für die Nutzung: Teilen Sie die HTTPS -Sitzung teilen

Hier ist ein praktischer Beispielcode, der Curl_Share_init verwendet, um eine HTTPS -Sitzung zu teilen:

 <?php
// Initialisieren Sie den gemeinsam genutzten Griff
$sh = curl_share_init();

// Stellen Sie die Freigabeoptionen fest,Offen SSL Sitzungsteilung
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);

// Bereiten Sie mehrere Anfragen vor
$urls = [
    'https://m66.net/api/endpoint1',
    'https://m66.net/api/endpoint2',
    'https://m66.net/api/endpoint3',
];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SHARE, $sh); // App Shared Griff

    $response = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Curl error: ' . curl_error($ch) . "\n";
    } else {
        echo "Response from {$url}:\n$response\n\n";
    }

    curl_close($ch);
}

// Geteilte Griffe aufräumen
curl_share_close($sh);
?>

In diesem Beispiel weisen alle drei Anfragen auf verschiedene Schnittstellen unter dem Namen M66.NET hin und alle teilen die SSL -Sitzung über denselben freigegebenen Handle. Dies bedeutet, dass nach Abschluss des HTTPS -Handshake für die erste Anfrage nachfolgende Anforderungen vorhandene Sitzungen wiederverwenden können, wodurch der wiederholte Handshake -Prozess vermieden wird.

Dinge zu beachten

  1. Gewindesicherheit : Obwohl PHP selbst Single-Threaded ist, müssen Sie, wenn Sie einen gemeinsam genutzten Griff in einer Multi-Thread-Umgebung verwenden, auf Probleme mit der Synchronisierung von Threads achten.

  2. Verwenden Sie Curlshopt_unshare : Wenn Sie eine bestimmte Art von Daten (z. B. einen Cookie- oder DNS -Cache) in einem bestimmten Stadium nicht geschafft haben, können Sie Curlshopt_unshare verwenden.

  3. Nur die Wiederverwendung desselben Hosts ist wirksam : Eine gemeinsame SSL -Sitzung kann nur zwischen demselben Host (Host) und dem Port in Kraft treten und kann nicht über Domain -Namen geteilt werden.

abschließend

Durch die Verwendung von Curl_Share_init- und Shared -Griff -Konfigurationen können wir den Systemaufwand von TLS -Handshake effektiv reduzieren, wenn wir eine große Anzahl von HTTPS -Anforderungen erstellen. Dies hat erhebliche Vorteile bei der Kommunikation von Microservice, Hochfrequenz-API-Anfragen, Datenkriechen und anderen Szenarien. Verbessert nicht nur die Leistung, sondern reduziert auch den Ressourcenverbrauch von Servern und Clients, sondern ist auch eine wichtige Fähigkeit in der Hochleistungsnetzwerkprogrammierung von PHP.