Bei groß angelegten HTTP-Anfragen ist die Curl-Bibliothek von PHP ein sehr leistungsfähiges Tool, mit dem wir gleichzeitige Anfragen stellen und die Leistung verbessern können. Das ledigliche Bestehen mehrerer Anfragen führt jedoch nicht unbedingt zu einer optimalen Leistung, da wir die Verbindung effizient verwalten müssen. Um eine effizientere Verbindungsoptimierung zu erzielen, können Sie Curl_Upkeep () und Curl_Multi_Select () Funktionen verwenden, um den Verbindungsaufwand zu reduzieren.
Curl_Upkeep () : Diese Funktion wird hauptsächlich zur Verwaltung von initialisierten Curl -Verbindungen verwendet, um sicherzustellen, dass sie bei der Verwendung gültig bleiben und Ressourcen sparen können, indem die Wiederverwendung der Verbindungen beibehalten wird, wodurch doppelte Verbindungsbetriebsprozesse reduziert werden.
curl_multi_select () : Diese Funktion wird mit CURL_MULTI_EXEC () verwendet, wodurch wir die Ausführungseffizienz von Multitasking -Curl -Anforderungen optimieren können. Seine Funktion besteht darin, das Warten auf mindestens ein Curl -Griff zu blockieren und für die effiziente Verwaltung einer großen Anzahl gleichzeitiger Anfragen geeignet zu sein.
Durch die Kombination dieser beiden Funktionen kann die Verzögerung während jeder Anfrage stark reduziert und die gleichzeitige Verarbeitungseffizienz zwischen mehreren Anforderungen verbessert werden.
Bevor Sie vorstellen, wie Sie Curl_Upkeep () und curl_multi_Select () verwenden, lesen wir eine grundlegende Multitasking -Ausführung. Der folgende Code zeigt, wie man curl_multi_init () und curl_multi_exec () verwendet, um gleichzeitige Anforderungen zu stellen.
// Multiple initialisierencURLHandhaben
$mh = curl_multi_init();
$handles = [];
$urls = [
'https://m66.net/api/data1',
'https://m66.net/api/data2',
'https://m66.net/api/data3'
];
// Erstellen Sie eine für jede AnfragecURLHandhaben
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch);
$handles[] = $ch;
}
// Multitasking -Anfragen durchführen
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
curl_multi_select($mh); // Blockieren, bis eine aktive Anfrage vorliegt
}
} while ($active);
// Verarbeiten Sie die Ergebnisse und reinigen Sie sie
foreach ($handles as $ch) {
$response = curl_multi_getcontent($ch);
echo $response;
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
curl_multi_close($mh);
Dieser Code multitasking wendet sich über curl_multi_exec () an und ruft CURL_MULTI_SELECT () auf, um jedes Mal auf die aktive Verbindung zu warten, wodurch unnötige CPU -Ressourcennutzung vermieden wird.
Um eine häufige Aufstellung und Zerstörung von Verbindungen zu vermeiden, können wir Verbindungsmultiplexen durch die Funktion curl_upekeep () implementieren. Obwohl PHP nicht direkt curl_upekeep () Funktionsfunktion liefert, können wir die Funktionskombination curl_multi_* verwenden, um ähnliche Funktionen zu erzielen. Insbesondere verwenden wir einen anhaltenden Verbindungspool, um diese Verbindungen zu verwalten, anstatt die Verbindung jedes Mal nachzubauen, wenn wir anfordern.
Initialisierung von Verbindungspool : Wir erstellen zunächst einen Curl -Handle -Pool, und die Verbindungen im Pool werden wiederverwendet, anstatt eine neue Verbindung für jede Anforderung zu initialisieren.
Verbindungsmultiplexing : Während der Ausführung von Multitasking -Anforderungen können wir die Verbindung im Verbindungspool überprüfen, und wenn kostenlose Verbindungen vorhanden sind, können wir sie wiederverwenden.
// Erstellen Sie einen anhaltenden Verbindungspool
$mh = curl_multi_init();
$handles = [];
$connectionPool = [];
// AngefordertURLs
$urls = [
'https://m66.net/api/data1',
'https://m66.net/api/data2',
'https://m66.net/api/data3'
];
// InitialisierungcURLHandhaben并存储
foreach ($urls as $url) {
if (empty($connectionPool[$url])) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$connectionPool[$url] = $ch; // Speichern Sie neue Verbindungen in den Verbindungspool
} else {
$ch = $connectionPool[$url]; // Verwenden Sie eine vorhandene Verbindung im Verbindungspool
}
curl_multi_add_handle($mh, $ch);
$handles[] = $ch;
}
// Multitasking -Anfragen durchführen
do {
$status = curl_multi_exec($mh, $active);
if ($active) {
curl_multi_select($mh); // Blockieren, bis eine aktive Anfrage vorliegt
}
} while ($active);
// Verarbeiten Sie die Ergebnisse und reinigen Sie sie
foreach ($handles as $ch) {
$response = curl_multi_getcontent($ch);
echo $response;
curl_multi_remove_handle($mh, $ch);
// Hier schließen wir die Verbindung nicht,Multiplexen im Verbindungspool halten
}
curl_multi_close($mh);
Im obigen Code erstellen wir einen einfachen Verbindungspool ConnectionPool und multiplexen Sie es mit Verbindungen im Pool, wenn Multitasking -Anforderungen ausgeführt werden. Dies kann die Verbindungseffizienz erheblich verbessern, insbesondere wenn mehrere Anforderungen auf denselben Domänennamen hinweisen.
Durch die Kombination von Curl_Upkeep () (Verbindungspool -Management) und curl_multi_select () (Blockierung und Warten auf aktive Anforderungen) können wir Curl -Multitasking -Anforderungen in PHP optimieren, um die Leistung des Gesamtsystems zu verbessern. Der Verbindungsbeamtenmechanismus reduziert effektiv die häufige Erstellung und Zerstörung von Verbindungen und spart Systemressourcen, während curl_multi_select () eine effiziente gleichzeitige Ausführung gewährleistet.
Auf diese Weise können Sie Verbindungen effizienter verwalten, wenn Sie große Mengen an HTTP -Anforderungen behandeln, die Antwortgeschwindigkeit der Programme verbessern, die Latenz reduzieren und eine höhere Leistung erzielen.