Position actuelle: Accueil> Derniers articles> curl_multi_close les meilleures pratiques avec des demandes multithread

curl_multi_close les meilleures pratiques avec des demandes multithread

gitbox 2025-05-12

En PHP, la fabrication de demandes multithread est souvent implémentée à l'aide de la bibliothèque Curl . Curl est une bibliothèque puissante qui peut nous aider à faire des demandes HTTP. En utilisant les fonctions Curl_Multi_ * Series, PHP peut envoyer plusieurs demandes HTTP en parallèle, améliorant ainsi les performances de l'application. Cependant, de nombreuses personnes ignorent le nettoyage des ressources une fois la demande terminée. Afin d'optimiser les performances des demandes multithread, l'utilisation correcte de la fonction Curl_Multi_Close est particulièrement importante.

Qu'est-ce que curl_multi_close?

La fonction CURL_MULTI_CLOSE est utilisée pour fermer CURL multi-manchettes initialisées par curl_multi_init . L'appel de cette fonction libérera les ressources de curl, évitera les fuites de mémoire et s'assurera que la connexion est correctement fermée une fois chaque demande parallèle terminée.

Lors de la réalisation de demandes multiples, chaque demande peut prendre un certain temps à terminer. Pour maximiser les performances et réduire la consommation de mémoire, Curl_Multi_Close est une fonction très importante.

Comment optimiser les performances de la demande multithread à l'aide de curl_multi_close?

Voici un exemple de base de l'optimisation des performances de la demande multithread à l'aide de curl_multi_close :

 <?php

// Créer plusieurs demandes URL Tableau
$urls = [
    "http://gitbox.net/api/data1",
    "http://gitbox.net/api/data2",
    "http://gitbox.net/api/data3"
];

// Initialiser multiple cURL Poignée
$multiHandle = curl_multi_init();
$curlHandles = [];

// Loop initialise chaque demande
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  // Définissez le contenu de retour sur une chaîne
    curl_multi_add_handle($multiHandle, $ch);       // 添加到多线程Poignée中
    $curlHandles[] = $ch;  // Enregistrer chacun cURL Poignée
}

// Effectuez toutes les demandes
do {
    $status = curl_multi_exec($multiHandle, $active);
    if ($active) {
        // Attendez que toutes les demandes complètent
        curl_multi_select($multiHandle);
    }
} while ($active);

// Obtenez les résultats de toutes les demandes et nettoyez les ressources
foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    echo $response . "\n";  // Résultat de la demande de sortie

    // Retirer cURL Poignée
    curl_multi_remove_handle($multiHandle, $ch);

    // fermeture cURL Poignée
    curl_close($ch);
}

// fermeture多重 cURL Poignée
curl_multi_close($multiHandle);
?>

Expliquez le code

  1. Initialiser plusieurs demandes : nous définissons d'abord un tableau contenant plusieurs URL. Ensuite, utilisez Curl_Init pour initialiser une poignée Curl pour chaque URL.

  2. Ajoutez une poignée à plusieurs poignées Curl : via la fonction Curl_Multi_Add_Handle , nous ajoutons chaque poignée Curl aux multiples poignées, afin que plusieurs demandes puissent être exécutées en parallèle.

  3. Effectuez toutes les demandes : utilisez curl_multi_exec pour effectuer toutes les demandes parallèles. Pendant le processus de demande, utilisez Curl_Multi_Select pour attendre que la demande se termine pour vous assurer que nous ne sommes pas occupés à attendre.

  4. Nettoyer des ressources : une fois toutes les demandes terminées, nous obtenons les données de réponse pour chaque demande via CURL_MULTI_GETCONTENT . Ensuite, utilisez Curl_Multi_Remove_Handle pour supprimer chaque poignée Curl des multiples poignées et appeler Curl_close pour fermer chaque poignée.

  5. Fermez plusieurs poignées : Enfin, utilisez Curl_Multi_Close pour fermer la poignée Curl multiple. Cette étape consiste à libérer toutes les ressources pour éviter les fuites de mémoire.

Meilleures pratiques: optimiser les demandes parallèles

  1. Limitez le nombre de demandes parallèles : bien que PHP puisse faire des demandes multithread, trop de demandes simultanées peuvent entraîner une charge de serveur excessive. Il peut raisonnablement limiter le nombre de concurrenances peut aider à améliorer les performances et à éviter les charges de réseau inutiles.

  2. Gestion des erreurs : Dans l'application réelle, n'oubliez pas de vérifier l'état de retour de chaque demande et de gérer la défaillance de la demande. Vous pouvez obtenir des informations d'erreur détaillées via Curl_getInfo pour assurer la stabilité du programme.

  3. Libération de ressources : Appel Curl_Multi_Close et Curl_close est une étape très importante, ce qui peut garantir que toutes les ressources sont publiées. Si vous oubliez cette étape, cela peut entraîner des fuites de mémoire, surtout lorsque vous faites beaucoup de demandes simultanées.

  4. Répartition des demandes de lots : S'il y a un très grand nombre de demandes, envisagez de diviser la demande en plusieurs lots, chaque lot traitant moins de demandes. Cela peut éviter les goulots d'étranglement des performances causés par des demandes trop importantes pour un certain lot.

Résumer

En utilisant CURL_MULTI_CLOSE pour optimiser la libération de ressources pour les demandes multi-thread, les performances et la stabilité de l'application peuvent être efficacement améliorées. Gérer correctement les demandes simultanées et le nettoyage des ressources peuvent non seulement réduire les fuites de mémoire, mais également améliorer la vitesse de réponse du programme.