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.
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.
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.
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.
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.
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.
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.