Position actuelle: Accueil> Derniers articles> Comment améliorer l'efficacité d'exécution de plusieurs demandes via CURL_MULTI_CLOSE

Comment améliorer l'efficacité d'exécution de plusieurs demandes via CURL_MULTI_CLOSE

gitbox 2025-05-12

En PHP, l'utilisation de Curl pour les demandes HTTP est très courante, en particulier lorsque les demandes doivent être envoyées à plusieurs services externes, Curl fournit un moyen très puissant d'implémenter cette fonctionnalité. Cependant, par défaut, Curl prend en charge uniquement les demandes synchrones, c'est-à-dire que chaque fois qu'une demande est envoyée, PHP attendra que la demande se termine avant de continuer à traiter la demande suivante.

Cependant, lorsque nous devons envoyer des demandes à plusieurs services en même temps, cette approche synchronisée peut conduire à des goulots d'étranglement significatifs, en particulier lorsque le nombre de demandes est important. Afin d'améliorer l'efficacité d'exécution simultanée des demandes, nous pouvons utiliser le groupe de fonction Curl_Multi_ * , l'une des fonctions les plus critiques est Curl_Multi_Close .

Qu'est-ce que curl_multi_close ?

CURL_MULTI_CLOSE fait partie de la bibliothèque Multi-Request Curl dans PHP, qui ferme la poignée Curl et libère des ressources. Il est généralement utilisé après la réalisation de plusieurs demandes simultanées à l'aide de Curl_Multi_Exec . De cette façon, le cycle de vie de plusieurs demandes simultanées peut être géré plus efficacement, améliorant ainsi les performances, en particulier lors du traitement de plusieurs demandes de réseau.

Exemples d'amélioration de l'efficacité de la demande via curl_multi_close

En supposant que nous avons plusieurs URL qui doivent demander, nous pouvons exécuter ces demandes simultanément via la fonction Curl_Multi_ * . Ce qui suit est un exemple de code PHP qui utilise Curl_Multi_Close pour améliorer l'efficacité de la concurrence des demandes:

 <?php
// Initialiser plusieurs demandes cURL Poignée
$urls = [
    "http://gitbox.net/api/endpoint1",
    "http://gitbox.net/api/endpoint2",
    "http://gitbox.net/api/endpoint3",
    "http://gitbox.net/api/endpoint4"
];

$multiHandle = curl_multi_init();
$curlHandles = [];

// Pour chacun URL Créer un séparé cURL Poignée
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[] = $ch;
}

// Effectuez toutes les demandes
$running = null;
do {
    curl_multi_exec($multiHandle, $running);
    curl_multi_select($multiHandle);  // Attendez une demande pour terminer
} while ($running);

// Obtenez le contenu de la réponse
foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    echo $response . "\n";  // Contenu de réponse de sortie
}

// fermeture cURL Poignée
foreach ($curlHandles as $ch) {
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// Libérer les ressources
curl_multi_close($multiHandle);
?>

Analyse de code

  1. Initialiser les poignées de curl : nous créons d'abord une poignée Curl distincte pour chaque URL pour demander et ajouter ces poignées à la session Curl multiple.

  2. Exécuter des demandes simultanées : toutes les demandes sont exécutées de manière asynchrone via Curl_Multi_Exec . Il sera exécuté en continu jusqu'à ce que toutes les demandes soient remplies. CURL_MULTI_SELECT permettra au programme d'attendre une demande terminée, ne bloquant donc pas l'ensemble du processus.

  3. Obtenez des données de réponse : une fois toutes les demandes terminées, obtenez le contenu de la réponse de chaque demande via CURL_MULTI_GETCONTENT .

  4. Fermer et nettoyer : Enfin, supprimez et fermez chaque poignée de boucle individuelle, puis utilisez Curl_Multi_Close pour libérer les ressources des multiples poignées de session Curl.

Pourquoi Curl_Multi_Close est-il important?

CURL_MULTI_CLOSE ne ferme pas seulement la poignée de plusieurs sessions, il garantit également que toutes les ressources Curl sont correctement libérées. Dans les scripts de longue date, l'utilisation rationnelle de Curl_Multi_Close peut effectivement empêcher les fuites de mémoire et améliorer la stabilité du programme.

Avantages de l'utilisation de la fonction Curl_Multi_ *

  1. Exécution simultanée : les demandes synchrones traditionnelles sont exécutées séquentiellement, tandis que la fonction CURL_MULTI_ * permet d'exécuter plusieurs demandes en parallèle, améliorant considérablement l'efficacité d'exécution, en particulier lorsque les demandes doivent être envoyées à plusieurs URL différentes.

  2. E / S non bloquant : Grâce à la coopération de Curl_Multi_Select et Curl_Multi_Exec , PHP peut continuer à traiter d'autres demandes en attendant qu'une demande réponde, en évitant le problème de blocage et d'attente.

  3. Libération des ressources : En utilisant Curl_Multi_Close raisonnablement, les ressources peuvent être publiées à temps une fois la demande terminée, en évitant les fuites de mémoire et autres problèmes.

en conclusion

CURL_MULTI_CLOSE joue un rôle crucial dans l'exécution simultanée de plusieurs demandes HTTP. En utilisant CURL_MULTI_EXEC et CURL_MULTI_CLOSE S Rationally, les développeurs PHP peuvent améliorer considérablement l'efficacité des applications lors du traitement de plusieurs demandes et s'assurer que les ressources sont gérées efficacement. Pour les scénarios où des demandes simultanées élevées sont nécessaires, l'utilisation de plusieurs capacités de traitement de Curl est une méthode d'optimisation très efficace.