En développement, nous pouvons rencontrer des situations où nous devons lancer plusieurs demandes HTTP en même temps. La bibliothèque Curl de PHP fournit un moyen très pratique d'initier plusieurs demandes HTTP en parallèle, qui est la fonction curl_multi_ * . curl_multi_add_handle et curl_multi_close sont deux fonctions clés de ce type d'opération. Cet article expliquera comment les utiliser correctement pour la gestion des demandes de boucles multiples.
Curl est un outil pour envoyer des demandes aux serveurs et obtenir des réponses. Il prend en charge plusieurs protocoles tels que HTTP, HTTPS, FTP, etc. Dans PHP, Curl peut être utilisé via une série de fonctions, les plus couramment utilisées incluent Curl_init , Curl_setopt et Curl_exec .
La fonction Curl_Multi_Add_Handle est utilisée pour ajouter plusieurs poignées de session Curl à un pool de traitement Curl multiple. Cela nous permet de traiter plusieurs demandes en parallèle, améliorant ainsi l'efficacité, en particulier lorsque plusieurs demandes HTTP doivent être envoyées.
// Initialiser multiple cURL Session
$ch1 = curl_init('https://gitbox.net/api/resource1');
$ch2 = curl_init('https://gitbox.net/api/resource2');
// Configurez chacun cURL Options demandées
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// Combien d'initialisation cURL Poignée
$multiHandle = curl_multi_init();
// Volonté cURL PoignéeAjouter à到多重 cURL Poignée中
curl_multi_add_handle($multiHandle, $ch1);
curl_multi_add_handle($multiHandle, $ch2);
// Exécuter une demande
do {
$status = curl_multi_exec($multiHandle, $active);
if ($active) {
// Attendez une demande d'activité pour terminer
curl_multi_select($multiHandle);
}
} while ($active && $status == CURLM_OK);
// Obtenir des données de réponse
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// Résultat de sortie
echo "Response from resource1: $response1\n";
echo "Response from resource2: $response2\n";
// Fermer chacun cURL Session
curl_multi_remove_handle($multiHandle, $ch1);
curl_multi_remove_handle($multiHandle, $ch2);
Dans le code ci-dessus, CURL_MULTI_ADD_HANDLE ajoute deux poignées Curl $ CH1 et $ CH2 à la poignée Curl multiple $ multi-handle , puis exécute ces demandes via Curl_Multi_Exec . Curl_Multi_Select attendra que la demande se termine, implémentant ainsi le traitement parallèle.
Lorsque toutes les demandes sont terminées, nous devons fermer la poignée de boucles multiples. À l'heure actuelle, utilisez la fonction curl_multi_close . Cette fonction libère des ressources liées à la poignée créée par Curl_Multi_Init .
// Combien fermer après avoir terminé la demande cURL Poignée
curl_multi_close($multiHandle);
Après avoir utilisé CURL_MULTI_CLOSE , toutes les ressources liées à la poignée Curl multiples sont nettoyées. Notez qu'avant la fermeture de plusieurs poignées de boucle, toutes les poignées de boucle ajoutées doivent être supprimées en premier, sinon des fuites de ressources se produiront.
Voici un exemple complet montrant comment gérer plusieurs demandes HTTP à l'aide de Curl_Multi_Add_Handle et Curl_Multi_Close :
// Initialiser multiple cURL Session
$ch1 = curl_init('https://gitbox.net/api/resource1');
$ch2 = curl_init('https://gitbox.net/api/resource2');
// installation cURL Options
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// Combien d'initialisation cURL Poignée
$multiHandle = curl_multi_init();
// Ajouter à cURL Session到多重处理池
curl_multi_add_handle($multiHandle, $ch1);
curl_multi_add_handle($multiHandle, $ch2);
// Effectuez plusieurs demandes
do {
$status = curl_multi_exec($multiHandle, $active);
if ($active) {
curl_multi_select($multiHandle); // Attendez que la demande se termine
}
} while ($active && $status == CURLM_OK);
// Obtenez le contenu retourné
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// Résultat de la demande de sortie
echo "Response from resource1: $response1\n";
echo "Response from resource2: $response2\n";
// Retirer cURL Session
curl_multi_remove_handle($multiHandle, $ch1);
curl_multi_remove_handle($multiHandle, $ch2);
// Combien est désactivé cURL Poignée
curl_multi_close($multiHandle);
Ce code montre entièrement comment lancer plusieurs demandes HTTP en parallèle et fermer plusieurs poignées de curl une fois la demande terminée.