Die Funktion curl_share_init () wird verwendet, um ein Curl -Handle für eine gemeinsame Ressource zu erstellen. Durch dieses gemeinsame Ressourcenhandle können mehrere Curl -Sitzungen (d. H. Mehrere Curl -Handles) dieselben Ressourcen wie Cookies, DNS -Abfrages -Cache usw. freigeben
Wenn Sie mehrere Curl-Sitzungen verwenden, muss möglicherweise jede Sitzung den Domänennamen neu auflösen und Cookies und andere Ressourcen erhalten. Durch das Teilen von Ressourcen können diese redundanten Vorgänge vermieden werden.
Durch die Funktion curl_share_init () können einige zugrunde liegende Ressourcen zwischen Curl -Sitzungen geteilt werden, wodurch die doppelte Arbeit zwischen mehreren Anforderungen reduziert werden kann. Viele Operationen in HTTP -Anfragen (z. B. DNS -Abfragen, Cookies usw.) werden bei Multithread -Anfragen gemeinsam genutzt, und die Verwendung von gemeinsam genutzten Ressourcen verringert den Overhead dieser Vorgänge erheblich.
Angenommen, Sie stellen mehrere gleichzeitige Anfragen vor, und für jede Anfrage sind unabhängige DNS -Abfragen, Cookie -Speichern und andere Vorgänge erforderlich. Diese Vorgänge selbst führen zu einem bestimmten Leistungsaufwand. Wenn diese Vorgänge zwischen verschiedenen Anfragen geteilt werden können, kann die Effizienz der Ausführung der Anfrage erheblich verbessert und der zeitliche Verbrauch pro Anforderung reduziert werden.
Das Folgende ist ein einfaches Beispiel, das die Funktion curl_share_init () verwendet, die zeigt, wie die Leistung von PHP -Multithread -Anforderungen durch Freigabe von Ressourcen verbessert wird.
<?php
// Initialisieren Sie gemeinsame Ressourcen
$ch_share = curl_share_init();
curl_share_setopt($ch_share, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
curl_share_setopt($ch_share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
// Richten Sie gleichzeitige Anfragen ein URL Liste
$urls = [
'http://m66.net/api/data1',
'http://m66.net/api/data2',
'http://m66.net/api/data3',
];
// Multiple erstellen cURL Handhaben
$multi_handle = curl_multi_init();
$curl_handles = [];
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SHARE, $ch_share); // Mithilfe gemeinsamer Ressourcen
curl_multi_add_handle($multi_handle, $ch);
$curl_handles[] = $ch;
}
// Gleichzeitige Anfragen durchführen
$running = null;
do {
curl_multi_exec($multi_handle, $running);
curl_multi_select($multi_handle);
} while ($running > 0);
// Das Anforderungsergebnis abrufen und ausgeben
foreach ($curl_handles as $ch) {
$response = curl_multi_getcontent($ch);
echo $response . "\n";
curl_multi_remove_handle($multi_handle, $ch);
}
// Schließen Sie die Ressource
curl_multi_close($multi_handle);
curl_share_close($ch_share);
?>
Shared Resource Initialisierung : Erstellen Sie zunächst einen freigegebenen Ressourcenhandel $ ch_share über curl_share_init () . Anschließend setzen wir die Art der gemeinsam genutzten Ressourcen über curl_share_setopt () und geben die zu gemeinsam genutzten Ressourcen an, z. B. Cookies und DNS -Daten.
Einrichten von URL -Liste für gleichzeitige Anfragen : Wir definieren eine Reihe von URLs, die mehrere URLs darstellen, die gleichzeitig angefordert werden sollen.
CORL -Handle erstellen : Für jede URL erstellen wir ein Curl -Handle und setzen die Option curlopt_share auf das zuvor erstellte freigegebene Ressourcenhandle $ ch_share .
Gleichzeitige Ausführungsanforderung : Wir verwenden curl_multi_init (), um eine Multi-Griff-Curl-Ressource $ multi_handle zu erstellen und der Ressource mehrere Curl-Handle hinzuzufügen. Gleichzeitige Anforderungen werden über curl_multi_exec () ausgeführt, bis alle Anforderungen abgeschlossen sind.
Holen Sie sich das Ergebnis und geben Sie das Ergebnis aus : Erhalten Sie das Rückgabeergebnis jeder Anforderung über curl_multi_getContent () und geben Sie es aus.
Ressource schließen : Verwenden Sie nach Abschluss der Anforderung curl_multi_close () , um die Multi-Griff-Ressource zu schließen und schließlich den freigegebenen Ressourcenhandle über curl_share_close () zu schließen.
Durch die Verwendung von curl_share_init () vermeiden wir unabhängige DNS -Abfragen und Cookies für jede Anfrage. Der spezifische Leistungsverbesserungseffekt sollte anhand verschiedener Netzwerkumgebungen und der Anzahl der Anforderungen gemessen werden. Bei einer großen Anzahl gleichzeitiger Anfragen kann die Reduzierung doppelter DNS -Abfragen und der Ressourcenbelastung die Gesamtleistung der Anfrage erheblich verbessern.
Curl_share_init () funktioniert jedoch nicht für alle Szenarien. Wenn der angeforderte Inhalt völlig unterschiedlich ist und jede angeforderte Ressource unabhängig verarbeitet werden muss, kann die Verwendung gemeinsamer Ressourcen möglicherweise nicht zu erheblichen Leistungsverbesserungen führen. Die Verwendung einer gemeinsam genutzten Curl -Ressource funktioniert nur, wenn mehrere Anfragen bestimmte Ressourcen teilen müssen.
Die Funktion curl_share_init () bietet Leistungsverbesserungen in Multithread -Anfragen, insbesondere wenn sie gemeinsame Ressourcen (z. B. Cookies, DNS -Caches usw.) umfasst. Durch die rationale Nutzung gemeinsamer Ressourcen können wir doppelte Vorgänge reduzieren und die Effizienz gleichzeitiger Anfragen optimieren. Die Verwendung von curl_share_init () kann jedoch möglicherweise nicht zu erheblichen Leistungsverbesserungen in Situationen führen, in denen gemeinsame Ressourcen nicht erforderlich sind. Daher sollte die Verwendung dieser Funktion basierend auf bestimmten Anforderungen und Szenarien ermittelt werden.