L'optimisation des performances est un aspect qui les développera très préoccupés lors de l'utilisation de Curl pour les demandes de réseau en PHP. Curl lui-même prend en charge la réutilisation des connexions, ce qui peut réduire les frais généraux causés par un établissement de connexion TCP fréquent. Afin d'améliorer davantage l'efficacité des scénarios multi-requêtes, PHP Curl fournit la fonction Curl_share_Init () , qui est utilisée pour partager certaines ressources entre plusieurs poignées Curl, telles que le cache DNS, les poignées de connexion, etc., est-elle donc Curl_share_init () adapté à la longue connexion Multiplexing? Quel rôle peut-il jouer dans la gestion longue des connexions? Cet article analysera ce problème en profondeur du point de vue de l'utilisation pratique.
curl_share_init () est une fonction fournie par l'extension Curl de PHP pour initialiser une poignée de partage de curl. Cette poignée peut partager des ressources entre plusieurs demandes de curl, améliorant ainsi les performances globales. Utilisé avec l'option curlopt_share de la fonction curl_setopt () , plusieurs demandes Curl peuvent être liées à la même poignée partagée.
L'exemple de code est le suivant:
$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://m66.net/api/endpoint1");
curl_setopt($ch1, CURLOPT_SHARE, $sh);
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://m66.net/api/endpoint2");
curl_setopt($ch2, CURLOPT_SHARE, $sh);
La réutilisation de la connexion fait référence à plusieurs demandes de multiplexage de la même connexion sous-jacente (généralement conserver pour TCP ou HTTP / 1.1). Par défaut, Curl est livré avec un mécanisme de multiplexage de connexion, mais sa portée est limitée aux demandes dans une seule poignée Curl ou la même poignée multiple. L'intention d'origine de curl_share_init () est de permettre à plusieurs poignées de curl indépendantes de partager des informations de connexion.
Mais le point est: la fonction de multiplexage de connexion de Curl elle-même n'est pas implémentée via la poignée de partage, mais s'appuie sur l'interface Multi Curl (comme Curl_Multi_Init) pour gérer le pool de connexion.
autrement dit:
curl_share_init () est principalement utilisé pour partager le cache DNS, les sessions SSL, les cookies et autres ressources;
Il ne prend pas directement en charge le multiplexage des poignées de connexion (curl_lock_data_connect n'est pas pris en charge par PHP);
Pour réaliser le multiplexage de connexions véritable, vous devez utiliser la série de fonctions Curl_Multi_ * .
Par conséquent, curl_share_init () n'est pas conçu spécifiquement pour le multiplexage de connexion long, et il a un rôle limité dans le multiplexage de connexion.
Bien que curl_share_init () ne gère pas directement les pools de connexion, il a toujours sa valeur dans les systèmes de connexion longs:
Multiplexage du cache DNS : la requête DNS est une opération longue lorsque plusieurs demandes accèdent au même hôte. Grâce à CURL_LOCK_DATA_DNS , plusieurs poignées peuvent partager les résultats de résolution, réduire le nombre de requêtes DNS et accélérer le processus de demande.
Multiplexage du cache de session SSL : Lorsque CURL_LOCK_DATA_SSL_SESSE est activé, les sessions SSL peuvent être partagées entre plusieurs demandes HTTPS, en évitant les poignées de main répétées et en réduisant le temps de connexion TLS.
Gestion des cookies : en utilisant CURL_LOCK_DATA_COOKIE , vous pouvez partager des données de cookie entre plusieurs demandes, réalisez la continuation de connexion, qui est propice à une communication efficace tout en maintenant l'état de session.
Bien qu'il ne puisse pas participer directement à la réutilisation des poignées de connexion, il joue toujours un rôle important dans l'amélioration des performances dans les mécanismes périphériques qui prennent en charge les politiques de connexion longues (telles que la réduction des requêtes DNS et des frais généraux de poignée de main TLS).
curl_share_init () lui-même n'est pas responsable de la gestion ou de la réutilisation des connexions longues. Son objectif est principalement axé sur le partage de ressources telles que le cache DNS, les séances SSL et les cookies entre plusieurs demandes de curl. Pour obtenir un multiplexage efficace de connexion long, l'utilisation des interfaces Curl_Multi_ * La série doit être prioritaire. Dans le cas de la co-utilisation, Curl_share_Init () peut fournir un support de support pour les politiques de multiplexage des connexions et améliorer l'efficacité globale de la demande.
Par conséquent, lors de la création de programmes de communication de réseau PHP à coquille élevée ou à haute performance, Curl_share_Init () est un outil valable, mais ce n'est pas un outil de base pour le multiplexage à longues connexions, mais un rôle de support auxiliaire pour les méthodes d'optimisation.