Position actuelle: Accueil> Derniers articles> Comment utiliser Curl_Multi_Close dans des demandes simultanées pour optimiser la vitesse d'arrêt

Comment utiliser Curl_Multi_Close dans des demandes simultanées pour optimiser la vitesse d'arrêt

gitbox 2025-05-12

Lorsque vous utilisez CURL pour effectuer des demandes simultanées dans PHP, il est généralement impliqué en utilisant la série de fonctions Curl_Multi_ * pour gérer plusieurs demandes HTTP simultanées. Afin de gérer efficacement les demandes simultanées et de libérer des ressources liées, nous devons utiliser correctement la fonction Curl_Multi_Close . Cet article expliquera en détail comment utiliser correctement Curl_Multi_Close une fois la demande simultanée terminée, améliorant ainsi la vitesse de libération et d'arrêt des ressources.

1. Concept de demandes simultanées

Les demandes simultanées se réfèrent à la délivrance de plusieurs demandes HTTP en même temps, qui sont généralement utilisées pour améliorer l'efficacité de traitement de plusieurs demandes. Dans PHP, vous pouvez utiliser CURL_MULTI_INIT pour créer une poignée Curl multiple, ajouter plusieurs poignées de demande Curl distinctes à une poignée multiple via Curl_Multi_Add_Handle , puis effectuer ces demandes simultanées via CURL_MULTI_EXEC .

2. L'importance d'utiliser curl_multi_close

Lorsque nous utilisons la série de fonctions Curl_Multi_ * pour exécuter des demandes simultanées, chaque demande occupera certaines ressources système. Pour éviter la fuite des ressources, nous devons nous assurer de fermer les multiples poignées à l'aide de Curl_Multi_Close une fois la demande terminée pour libérer toutes les ressources pertinentes.

La fonction principale de curl_multi_close est:

  • Ferme toutes les séances de boucle associées à plusieurs poignées de boucle.

  • Libère les ressources de mémoire allouées lorsque curl_multi_init est créée.

Si Curl_Multi_Close n'est pas appelé, ces ressources ne seront pas publiées correctement, ce qui peut entraîner des fuites de mémoire ou des problèmes de performances.

3. Exemple: comment utiliser CURL_MULTI_CLOSE correctement

Voici un exemple simple qui montre comment gratuitement les ressources libres à l'aide de Curl_Multi_Close une fois la demande simultanée terminée.

 <?php

// initialisation cURL Plusieurs poignées
$mh = curl_multi_init();

// Définir plusieurs demandes URLs
$urls = [
    "https://gitbox.net/api/endpoint1",
    "https://gitbox.net/api/endpoint2",
    "https://gitbox.net/api/endpoint3"
];

// stockage cURL Poignée
$chArray = [];

// créer cURL Poignée并添加到Plusieurs poignées中
foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $chArray[] = $ch;
}

// Effectuer des demandes simultanées
do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        curl_multi_select($mh);
    }
} while ($active && $status == CURLM_OK);

// Obtenez des données de réponse et traitez-les
foreach ($chArray as $ch) {
    $response = curl_multi_getcontent($ch);
    // Traitement du contenu de la réponse
    echo "Response: " . $response . "\n";
}

// 正确关闭Plusieurs poignées并释放资源
foreach ($chArray as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch); // Fermer chacun cURL Poignée
}

// 最后关闭Plusieurs poignées
curl_multi_close($mh);

echo "Toutes les demandes ont été remplies,Des ressources ont été publiées。\n";
?>

4. Analyse de code

  1. Initialiser plusieurs poignées:
    CURL_MULTI_INIT est utilisé pour initialiser une poignée multiple, qui est utilisée pour gérer plusieurs poignées Curl.

  2. Créez une poignée en boucle et ajoutez-le à une poignée multiple:
    Nous créons une seule poignée Curl via Curl_init et définissons les paramètres de demande correspondants. Utilisez ensuite CURL_MULTI_ADD_HANDLE pour ajouter chaque poignée aux multiples poignées.

  3. Effectuez des demandes simultanées:
    CURL_MULTI_EXEC est une fonction de boucle qui exécute toutes les demandes simultanées jusqu'à ce que toutes les demandes soient terminées. CURL_MULTI_SELECT est utilisé pour attendre que la demande d'activité se termine.

  4. Traitement des données de réponse:
    Utilisez Curl_Multi_getContent pour obtenir la réponse de chaque demande et effectuer un traitement correspondant.

  5. Fermez la ressource:
    Utilisez CURL_MULTI_REMOVE_HANDLE pour supprimer chaque poignée de boucle des multiples poignées, puis appelez Curl_close pour fermer chaque poignée Curl. Enfin, appelez Curl_Multi_Close pour fermer les multiples poignées et libérer toutes les ressources.

5. Résumé

Il est très important de gérer et de libérer correctement les ressources lors des demandes simultanées. En utilisant CURL_MULTI_CLOSE et d'autres fonctions connexes, vous pouvez vous assurer que toutes les ressources occupées sont publiées une fois la demande terminée, en évitant les fuites de mémoire et les problèmes de performances. En particulier dans les scénarios avec des demandes simultanées élevées, une gestion raisonnable des ressources est cruciale pour améliorer la stabilité et l'efficacité du programme.