Position actuelle: Accueil> Derniers articles> Utilisez curl_share_init () pour améliorer les performances de la demande d'interface reposante

Utilisez curl_share_init () pour améliorer les performances de la demande d'interface reposante

M66 2025-05-22

Dans le développement de PHP, l'appel fréquent à l'interface RESTful est un scénario très courant, en particulier dans les architectures de microservice, la communication entre différents services dépend souvent des demandes HTTP. Curl est l'extension la plus couramment utilisée en PHP pour gérer les demandes HTTP. Bien que les frais généraux de performance d'une seule demande soient généralement acceptables, dans des scénarios de concurrence élevés, si chaque demande initialise à plusieurs reprises la ressource de connexion, elle entraînera un goulot d'étranglement considérable.

À l'heure actuelle, la fonction curl_share_init () est utile. Il fournit un mécanisme de partage des ressources qui permet à plusieurs poignées de curl de partager des informations telles que le cache DNS, les séances SSL, etc., réduisant ainsi le temps d'établissement de connexion et améliorant ainsi l'efficacité des demandes d'interface globales.

Qu'est-ce que curl_share_init ()?

curl_share_init () est une fonction d'initialisation de partage de ressources fournie par Curl, qui renvoie une poignée de partage Curl. Avec cette poignée, vous pouvez configurer plusieurs demandes de curl pour partager des ressources spécifiques, par exemple:

  • Cache dns ( curlshopt_share et curl_lock_data_dns )

  • Cookies ( curlshopt_share et curl_lock_data_cookie )

  • SSL Sessions ( curlshopt_share et curl_lock_data_ssl_session )

Ces données partagées peuvent réduire considérablement les calculs répétés et les poignées de main par demande.

Exemple pratique: demandes simultanées pour plusieurs interfaces reposantes

Supposons que nous devons demander simultanément les interfaces de service, par exemple:

  • https://api.m66.net/service1

  • https://api.m66.net/service2

  • https://api.m66.net/service3

Voici un exemple PHP complet à l'aide de Curl_share_Init () pour implémenter le partage des ressources:

 <?php
// Initialiser la poignée partagée
$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);

// Demander URL Tableau
$urls = [
    'https://api.m66.net/service1',
    'https://api.m66.net/service2',
    'https://api.m66.net/service3',
];

// initialisation curl_multi Poignée
$mh = curl_multi_init();
$handles = [];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SHARE, $sh); // Configurer des ressources partagées
    curl_multi_add_handle($mh, $ch);
    $handles[] = $ch;
}

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

// Obtenir des résultats
foreach ($handles as $ch) {
    $response = curl_multi_getcontent($ch);
    echo "Response: " . $response . "\n";
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

// Nettoyer les ressources
curl_share_close($sh);
curl_multi_close($mh);
?>

Analyse des bénéfices de performance

Les avantages de l'utilisation de curl_share_init () se reflètent principalement dans les aspects suivants:

  1. Partage de cache DNS : Évitez la résolution répétée du nom de domaine pour chaque demande, en particulier lorsque plusieurs demandes accèdent au même nom de domaine, les avantages sont évidents.

  2. Réutilisation de la session SSL : Réduisez les frais généraux de poignée de main SSL, en particulier les ressources CPU dans les scénarios où les appels d'interface HTTPS sont fréquents.

  3. Amélioration de l'efficacité de la connexion : lorsqu'elle est utilisée avec HTTP Keep-Alive, il peut considérablement améliorer l'efficacité de la demande d'interface.

Dans des environnements de concurrence élevés ou des scénarios d'application où plusieurs interfaces sont fréquemment appelées, l'utilisation rationnelle de curl_share_init () peut améliorer considérablement les performances globales et la vitesse de réponse du système.

Choses à noter

  • Toutes les ressources ne conviennent pas au partage, en particulier les cookies, ce qui peut entraîner des problèmes de sécurité ou de pollution de l'État.

  • La ressource partagée doit être fermée après que toutes les poignées de boucle qui ont été utilisées par la ressource partagée sont fermées.

  • Toutes les installations PHP n'ont pas activé la prise en charge partagée CURL, et vous pouvez vérifier l'état du support via curl_version () .