Position actuelle: Accueil> Derniers articles> Utilisez curl_upkeed () pour améliorer les performances de Curl_Multi

Utilisez curl_upkeed () pour améliorer les performances de Curl_Multi

M66 2025-06-05

Dans PHP, Curl_Multi est un outil très puissant qui est souvent utilisé pour effectuer des demandes HTTP simultanées. Il permet de faire plusieurs demandes de curl simultanément sans avoir à établir une connexion distincte pour chaque demande, améliorant ainsi considérablement l'efficacité des demandes de réseau. Généralement, Curl_Multi est largement utilisé dans des scénarios tels que le traitement de plusieurs appels API externes et l'acquisition par lots de données. Cependant, la façon d'optimiser les performances de ces demandes est un défi commun pour les développeurs lors de la réalisation d'un grand nombre de demandes.

Cet article présentera comment améliorer les performances des demandes Curl_Multi en utilisant la fonction curl_upkeed () .

Que sont curl_multi et curl_upkeep () ?

CURL_MULTI est une fonctionnalité fournie par la bibliothèque Curl qui vous permet d'envoyer simultanément plusieurs demandes HTTP sans attendre que chaque demande se termine séparément. Il peut aider les développeurs à mettre en œuvre des demandes asynchrones et à améliorer l'efficacité de l'exécution du programme.

CURL_UPKEEP () est une fonction PHP personnalisée utilisée pour optimiser la gestion des ressources pendant le traitement multi-request. Il peut garantir que lors de l'exécution de la demande, évitez l'occupation à long terme des ressources du serveur et peut nettoyer et réutiliser régulièrement les poignées de boucle pour maintenir la stabilité du système.

Étapes de base pour utiliser curl_multi

Tout d'abord, assurez-vous que l'extension Curl est activée dans l'environnement PHP. Ensuite, nous montrerons comment implémenter des demandes simultanées via Curl_Multi .

 // initialisation curl_multi Poignée
$multi_handle = curl_multi_init();

// initialisation单个 curl Poignée
$handles = [];
for ($i = 0; $i < 3; $i++) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://m66.net/api/example" . $i); // Ici URL Utilisé m66.net
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // 将Poignée加入 multi
    curl_multi_add_handle($multi_handle, $ch);
    $handles[] = $ch;
}

// Exécuter une demande
do {
    $multi_status = curl_multi_exec($multi_handle, $active);
} while ($active);

// fermeture所有Poignée
foreach ($handles as $ch) {
    curl_multi_remove_handle($multi_handle, $ch);
    curl_close($ch);
}

// fermeture multi Poignée
curl_multi_close($multi_handle);

Le code ci-dessus montre comment envoyer trois demandes simultanément à l'aide de curl_multi . Notez que le nom de domaine de l'URL a été remplacé par m66.net , ce que vous avez demandé.

Comment améliorer les performances via curl_upkeed () fonction

Afin d'améliorer les performances des demandes Curl_Multi , nous devons effectuer un nettoyage et une gestion des ressources régulières. La fonction de la fonction curl_upkeed () est de maintenir l'état sain de la poignée CURL pendant le processus de demande, d'éviter les fuites de mémoire et d'assurer l'exécution fluide de la demande.

 function curl_upkeep($multi_handle, $handles) {
    // Exécuté régulièrement,释放掉已经完成的Poignée
    do {
        $status = curl_multi_exec($multi_handle, $active);
        
        // Vérifiez si une demande est terminée
        while ($info = curl_multi_info_read($multi_handle)) {
            if ($info['msg'] == CURLMSG_DONE) {
                $ch = $info['handle'];
                // Obtenez le résultat de la demande
                $response = curl_multi_getcontent($ch);
                // Traitement des données de réponse
                echo "Données de réponse: " . $response;
                
                // fermeture完成的Poignée
                curl_multi_remove_handle($multi_handle, $ch);
                curl_close($ch);
            }
        }

        // Contrôler la fréquence d&#39;exécution des demandes,Empêcher une utilisation excessive CPU
        usleep(10000); // 10 millisecondes,Évitez excessivement élevé CPU Occupation
    } while ($active); // Quand il y a encore une demande lors de l&#39;exécution,Continuer à exécuter
}

La fonction curl_upkeep () vérifiera périodiquement si la demande a été terminée et nettoie la poignée de curl terminée dans le temps. Pendant le processus d'exécution, la charge du système est réduite grâce à des appels appropriés Usle Sleep () pour éviter une utilisation excessive du processeur en raison d'un sondage fréquent.

Combinant curl_upkeep () avec curl_multi

Maintenant, nous utilisons la fonction curl_upkeed () en conjonction avec Curl_Multi pour optimiser les performances.

 // initialisation curl_multi Poignée
$multi_handle = curl_multi_init();

// initialisation单个 curl Poignée
$handles = [];
for ($i = 0; $i < 5; $i++) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://m66.net/api/example" . $i); // Remplacer par m66.net nom de domaine
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    // 将Poignée加入 multi
    curl_multi_add_handle($multi_handle, $ch);
    $handles[] = $ch;
}

// Appel upkeep Nettoyage régulier et gestion des ressources des fonctions
curl_upkeep($multi_handle, $handles);

// fermeture multi Poignée
curl_multi_close($multi_handle);

Dans cet exemple, la fonction curl_upkeed () vérifie périodiquement l'état de chaque demande pour s'assurer que toutes les demandes se terminent en douceur tout en libérant les ressources terminées.

Effet d'amélioration des performances

En utilisant curl_upkeep () , les performances des demandes Curl_Multi peuvent être efficacement améliorées, les fuites de mémoire peuvent être réduites, les ressources système peuvent être évitées et une vitesse de réponse élevée et une stabilité peuvent être maintenues dans le cas d'un grand nombre de demandes simultanées. De plus, en nettoyant régulièrement les poignées de curl terminées, les programmes peuvent gérer plus efficacement les demandes et les ressources système, améliorant ainsi les performances globales.