Position actuelle: Accueil> Derniers articles> Meilleures pratiques pour utiliser Curl_exec et Curl_Multi_Close

Meilleures pratiques pour utiliser Curl_exec et Curl_Multi_Close

gitbox 2025-05-29

En développement, nous devons souvent lancer des demandes HTTP à plusieurs serveurs ou API. Si vous en demandez un par un selon la méthode traditionnelle d'un seul lancement, il sera non seulement lent, mais aussi des ressources de serveur de déchets. PHP fournit des extensions Curl , où les fonctions Curl_Multi_Exec et Curl_Multi_Close peuvent nous permettre d'implémenter un traitement simultané à plusieurs requêtes, améliorant considérablement l'efficacité.

Cet article introduira en détail comment utiliser CURL_EXEC combiné avec Curl_Multi_Close pour un traitement de concurrence efficace, et donnez un exemple de code spécifique.

Concepts de base

  • curl_exec () : exécute une seule demande de curl.

  • curl_multi_exec () : exécuter plusieurs poignées Curl simultanément.

  • curl_multi_close () : Fermez une poignée par lots Curl et relâchez la ressource.

Si vous devez traiter simultanément un grand nombre de demandes, il est recommandé d'utiliser CURL_MULTI_EXEC au lieu d'appeler Curl_exec séparément pour chaque demande. CURL_MULTI_CLOSE est une étape importante pour nettoyer les ressources une fois toutes les demandes traitées.

Exemple de code

Voici un exemple simple qui montre comment demander simultanément plusieurs interfaces et traiter les réponses:

 <?php
// DemanderURLListe
$urls = [
    "https://gitbox.net/api/data1",
    "https://gitbox.net/api/data2",
    "https://gitbox.net/api/data3",
];

// Initialiser multiplecURLPoignée
$multiHandle = curl_multi_init();
$curlHandles = [];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[] = $ch;
}

// Effectuez toutes les demandes
$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
    if ($status > 0) {
        // Une erreur s&#39;est produite
        echo "cURL error: " . curl_multi_strerror($status);
        break;
    }
    // En attente d&#39;une connexion active
    curl_multi_select($multiHandle);
} while ($running > 0);

// Traiter la réponse de chaque demande
foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    $info = curl_getinfo($ch);
    if (curl_errno($ch)) {
        echo 'Request Error: ' . curl_error($ch) . PHP_EOL;
    } else {
        echo 'HTTP Code: ' . $info['http_code'] . PHP_EOL;
        echo 'Response: ' . $response . PHP_EOL;
    }
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// fermeturemulti handle
curl_multi_close($multiHandle);
?>

illustrer

  • Créez d'abord un multi-manche via curl_multi_init () .

  • Après avoir réglé chaque curl séparément, ajoutez-le à la manche multi-manche via curl_multi_add_handle () .

  • Utilisez curl_multi_exec () pour exécuter toutes les demandes, le sondage jusqu'à ce que toutes les demandes soient remplies.

  • curl_multi_select () peut réduire l'usage du processeur et améliorer l'efficacité.

  • Une fois la demande terminée, utilisez curl_multi_getContent () pour obtenir le contenu de réponse.

  • Enfin, n'oubliez pas d'utiliser CURL_MULTI_REMOVE_HANDLE () pour supprimer la poignée et fermer la poignée multiple avec curl_multi_close () pour libérer la ressource.

Choses à noter

  • Nombre de simultanément : s'il y a trop d'URL pour les demandes uniques, il est recommandé de les traiter par lots, tels que seulement 10 demandes sont envoyées à la fois pour éviter de consommer trop de ressources.

  • Manipulation du délai d'attente : Curlopt_timeout ou curlopt_connectTimeout peut être défini pour éviter les suspensions à long terme de certaines demandes.

  • Gestion des erreurs : utilisez curl_errno () et curl_error () pour vérifier si une seule demande est sans erreur.

  • Réutilisation de la connexion : activer Curlopt_forbid_reuse peut éviter la création de connexions TCP fréquente et améliorer les performances.

Résumer

En combinant Curl_exec et Curl_Multi_Close , nous pouvons gérer efficacement un grand nombre de demandes simultanées HTTP dans PHP. Cette méthode raccourcit non seulement le temps de demande global, mais utilise également pleinement les capacités de concurrence du serveur. C'est l'une des compétences essentielles pour construire des applications PHP haute performance.

En maîtrisant ces bases, vous pouvez faire fonctionner votre application PHP plus rapidement et plus stable!