In PHP ist die Curl -Erweiterung ein sehr wichtiges Tool, mit dem Sie Daten zwischen Clients und Servern austauschen können. Wir verwenden normalerweise Curl , um HTTP -Anforderungen zu senden oder Daten vom Server zu erhalten. Wenn jedoch mehrere Anfragen gestellt werden, wird es besonders kritisch, die Etablierungszeit der Verbindung zu optimieren.
Die Funktion curl_upekeep () ist eine Funktion zum Aufbewahren und Multiplexen von HTTP -Verbindungen, insbesondere in doppelten HTTP -Anforderungen. Es kann vermeiden, dass die Verbindung jedes Mal wieder hergestellt wird, wenn sie anfordert, wodurch die durch Verbindungsanlage verursachte Latenz verringert wird, wodurch die Leistung verbessert wird. In diesem Artikel wird ein detaillierter Vergleich der zeitaufwändigen Verbindungserstellung bei Verwendung von Curl_Upkeep () und ohne diese Funktion analysiert.
curl_upkeep () ist eine benutzerdefinierte Funktion (oder eine in bestimmten Bibliotheken implementierte Funktion), die eine anhaltende Verbindung zum Server beibehält. Seine Kernfunktion besteht darin, den Overhead zu verringern, TCP -Verbindungen wiederholt aufzubauen, indem der Verbindungspool bestehen, insbesondere wenn es erforderlich ist, Anforderungen häufig an denselben Server zu senden, ist der Effekt besonders offensichtlich.
Typischerweise ist das HTTP -Protokoll aufstandslos, was bedeutet, dass für jede Anforderung eine neue TCP -Verbindung hergestellt wird. Um die Wiederherstellung der Verbindung jedes Mal wiederherzustellen, können wir einige Parameter festlegen, um die Verbindung beständig zu halten. Beispielsweise hält Curl die Verbindung aktiv, indem die Verbindung hergestellt wird: Keep-Alive Header.
$ch = curl_init();
// Stellen Sie die Verbindung fest, um aktiv zu bleiben
curl_setopt($ch, CURLOPT_URL, 'https://m66.net/api/endpoint');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Connection: keep-alive'
));
// Eine Anfrage ausführen
$response = curl_exec($ch);
curl_close($ch);
Der obige Code hält die Verbindung mit m66.net aktiv und vermeidet die Wiederherstellung der Verbindung jedes Mal, wenn Sie sie anfordern.
Um die Leistungsverbesserung durch Curl_Upkeep () besser zu verstehen, werden wir sie mit einigen praktischen Beispielen nachstehend vergleichen.
In diesem Fall muss jedes Mal, wenn eine Anfrage gesendet wird, eine TCP-Verbindung wiederhergestellt werden. Dieser Verknüpfungsprozess umfasst normalerweise die Auflösung von DNS, den dreimaligen Handschlag und andere Operationen. Daher dauert es lange.
$ch = curl_init();
// Verwenden Sie keine anhaltenden Verbindungen,Stellen Sie die Verbindung jedes Mal wieder her, wenn Sie anfordern
curl_setopt($ch, CURLOPT_URL, 'https://m66.net/api/endpoint');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Eine Anfrage ausführen
$response = curl_exec($ch);
curl_close($ch);
In diesem Beispiel erstellt Curl jedes Mal, wenn Curl_exec () aufgerufen wird. Nehmen wir an, dass die DNS -Auflösung und die Verbindungseinrichtung ungefähr 200 ms dauern.
In diesem Fall wird der Verbindungspool multiplexiert, wodurch die Wiederherstellung der Verbindung jedes Mal wiederhergestellt wird, wenn sie angefordert wird. Sie können den Effekt von Multiplexing -Verbindungen erreichen, indem Sie Curlopt_forbid_Reuse und Curlopt_keep_Sending einstellen. Es ist zu beachten, dass die Wiederverwendung von Verbindungen nur für denselben Server gültig ist. Wenn Sie also häufig auf verschiedene Domainnamen zugreifen, wird der Effekt stark reduziert.
$ch = curl_init();
// Einstellung, um angeschlossen zu bleiben
curl_setopt($ch, CURLOPT_URL, 'https://m66.net/api/endpoint');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FORBID_REUSE, true); // Wiederverwendung von Verbindungen deaktivieren
curl_setopt($ch, CURLOPT_KEEP_SENDING, true); // Bleib in Verbindung
// Eine Anfrage ausführen
$response = curl_exec($ch);
curl_close($ch);
Bei Multiplexing-Verbindungen wird die Verbindung mit mehreren Anforderungen gesendet, wodurch die Auflösung von DNS, Drei-Handshake und andere Prozesse gespeichert werden, wodurch die zeitaufwändige jeder Anforderung erheblich verringert wird.
Anzahl der Anfragen | Verwenden Sie nicht curl_upkeep () (ms) | Verwenden Sie Curl_Upkeep () (MS) |
---|---|---|
1 | 200 ms | 100 ms |
10 | 2000 ms | 1000 ms |
100 | 20000 ms | 10000 ms |
Wie aus der obigen Tabelle ersichtlich ist, wird nach der Verwendung von Curl_Upkeep () die Verbindung, die durch jede Anforderung verbraucht wird, erheblich reduziert, insbesondere wenn die Anzahl der Anforderungen zunimmt, ist der Vorteil von Multiplexing -Verbindungen deutlicher.
Die Funktion curl_upekeep () reduziert den Aufwand der häufigen Verbindungsanlage erheblich, indem TCP -Verbindungen aufbewahrt und multiplexen, wodurch die Latenz verringert und die Leistung verbessert wird. Insbesondere in Szenarien, in denen Anfragen mehrmals an denselben Server gesendet werden müssen, ist der Effekt noch deutlicher.
Wenn Sie daher in einem PHP -Projekt häufig mit demselben Server kommunizieren, wird empfohlen, Curl_Upkeep () zu verwenden, um das Verbindungsmanagement zu optimieren und unnötige Verbindungsaufbauzeiten zu vermeiden.