Dans PHP, Curl est un outil très puissant pour effectuer des demandes HTTP via URL. Il peut gérer les demandes GET, Post et de nombreuses autres opérations liées à HTTP. Cependant, les requêtes DNS sont souvent l'un des goulots d'étranglement des performances lors de la réalisation de plusieurs demandes HTTP, en particulier dans les demandes à haute fréquence. Pour éviter de réprimer le DNS pour chaque demande, PHP fournit une fonction Curl_share_Init () pour le partage de cache DNS, améliorant ainsi les performances des applications PHP.
curl_share_init () est une fonction utilisée pour initialiser les ressources partagées. Les ressources partagées peuvent être utilisées pour partager des données entre plusieurs séances de boucle, en particulier les caches DNS. En partageant le cache DNS, plusieurs demandes de curl peuvent éviter les requêtes DNS en double, améliorant ainsi les performances des applications.
resource curl_share_init ( void )
La fonction n'a pas de paramètres d'entrée et renvoie une poignée partagée Curl ( curl_share_handle ). Cette poignée partagée est utilisée pour partager des données mises en cache entre différentes sessions Curl.
En l'absence d'un cache partagé, Curl effectue une requête DNS à chaque fois qu'elle demande, ce qui entraîne une augmentation de la latence. Surtout lorsque vous faites plusieurs demandes au même nom de domaine, la répétition des requêtes DNS peut perdre beaucoup de temps. En permettant le partage de cache DNS, la surcharge de la résolution DNS peut être considérablement réduite, augmentant ainsi la vitesse de réponse des applications PHP.
Tout d'abord, Curl_share_Init () est appelé pour initialiser la ressource partagée.
$share = curl_share_init();
Une fois la poignée de partage initialisée, utilisez curl_share_setopt () pour activer le partage de cache DNS. L'option Curlshopt_share spécifie le type de ressource à partager, tandis que curl_lock_data_dns est utilisé pour partager le cache DNS.
curl_share_setopt($share, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
Ensuite, créez plusieurs sessions de boucle et liez les poignées partagées.
$ch1 = curl_init('http://m66.net');
curl_setopt($ch1, CURLOPT_SHARE, $share);
$ch2 = curl_init('http://m66.net');
curl_setopt($ch2, CURLOPT_SHARE, $share);
Après avoir configuré toutes les sessions Curl, vous pouvez exécuter des demandes séparément.
curl_exec($ch1);
curl_exec($ch2);
Une fois la demande terminée, assurez-vous de fermer toutes les séances de boucle et les ressources partagées.
curl_close($ch1);
curl_close($ch2);
curl_share_close($share);
Voici un exemple complet qui montre comment implémenter le partage de cache DNS à l'aide de la fonction Curl_share_Init () :