Position actuelle: Accueil> Derniers articles> Optimiser les tâches rampantes de l'API à grande échelle à l'aide de curl_share_init ()

Optimiser les tâches rampantes de l'API à grande échelle à l'aide de curl_share_init ()

M66 2025-05-28

L'optimisation des performances est essentielle lors de l'exécution de tâches rampantes d'API à grande échelle. Pour les développeurs utilisant PHP et CURL, l'utilisation rationnelle de Curl_share_Init () peut réduire considérablement la consommation de ressources système et améliorer l'efficacité. Cet article introduira en détail la fonction, les scénarios d'utilisation et comment l'implémenter correctement dans le code.

Qu'est-ce que curl_share_init ()?

curl_share_init () est une fonction fournie par l'extension PHP Curl pour initialiser une poignée partagée (poignée de partage de curl). En partageant des poignées, vous pouvez partager des ressources telles que le cache DNS, le cache de session SSL, les cookies, etc. entre plusieurs poignées curl faciles, en évitant les connexions répétées ou une résolution répétée des noms de domaine, améliorant ainsi considérablement les performances de plusieurs demandes simultanées.

En bref, la fonction principale de cette fonction est "Partage des ressources et réduit les travaux en double".

Utiliser des scénarios

Lorsque vous devez faire des centaines ou des milliers de demandes HTTP en même temps, par exemple:

  • Crawer une grande base de données API REST;

  • Synchroniser régulièrement plusieurs sources de données tierces;

  • Accédez au même point de terminaison de l'API avec une concurrence élevée.

Si chaque demande établit une requête DNS et une poignée de main SSL séparément, cela peut provoquer un énorme gaspillage de performance. L'utilisation de curl_share_init () peut permettre à ces demandes de partager un cache partiel, en réduisant les frais généraux.

Exemples d'utilisation de base

Voici un exemple de code pour optimiser les tâches rampantes de l'API à grande échelle à l'aide de curl_share_init () :

 <?php

// Initialiser la poignée partagée
$sh = curl_share_init();

// Définir le type de ressource partagé,Nous partageons ici DNS et Cookie
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);

$urls = [
    'https://m66.net/api/data1',
    'https://m66.net/api/data2',
    'https://m66.net/api/data3',
    // Vous pouvez continuer à en ajouter plus API adresse
];

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

// Initialiser chacun cURL easy Poignée
foreach ($urls as $i => $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 绑定共享Poignée
    curl_setopt($ch, CURLOPT_SHARE, $sh);
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[$i] = $ch;
}

// Effectuer des demandes simultanées
$running = null;
do {
    curl_multi_exec($multiHandle, $running);
    curl_multi_select($multiHandle);
} while ($running > 0);

// Obtenir des résultats
foreach ($curlHandles as $i => $ch) {
    $response = curl_multi_getcontent($ch);
    echo "Response from {$urls[$i]}:\n";
    echo $response . "\n";
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// Libérer les ressources
curl_share_close($sh);
curl_multi_close($multiHandle);

Points clés

  1. Paramètres de ressources partagées <br> Utilisé couramment pour spécifier des types de ressources partagés à l'aide de curl_share_setopt () incluent:

    • Curl_lock_data_dns : cache DNS partagé.

    • Curl_lock_data_cookie : partager des cookies.

    • Curl_lock_data_ssl_session : partagez la session SSL.

  2. Ne partagez pas entre les processus
    La poignée partagée à Curl ne s'applique qu'au même processus. La rampe multi-processus nécessite l'utilisation d'autres mécanismes (tels que les caches externes ou les bases de données).

  3. Libérer correctement les ressources <br> Une fois la tâche rampante terminée, n'oubliez pas d'appeler curl_share_close () et curl_multi_close ( ) pour éviter la fuite de mémoire

Avantages de performance

En activant le partage de session DNS et SSL, vous pouvez éviter:

  • Répétez le même nom de domaine (en particulier pour un grand nombre de demandes du même domaine);

  • Répétez la poignée de main SSL (en particulier les demandes HTTPS).

Dans les tests réels, pour des centaines de demandes simultanées, cette optimisation peut réduire considérablement la charge du processeur et le réseau et améliorer le débit global.