Position actuelle: Accueil> Derniers articles> Comment intégrer la fonction CURL_SHARE_INIT dans Guzzle ou d'autres clients HTTP pour permettre une gestion des demandes plus efficace en partageant des poignées Curl?

Comment intégrer la fonction CURL_SHARE_INIT dans Guzzle ou d'autres clients HTTP pour permettre une gestion des demandes plus efficace en partageant des poignées Curl?

M66 2025-06-15

En PHP, l'utilisation de Curl pour faire des demandes HTTP est une opération très courante. Curl fournit des fonctionnalités riches pour gérer tous les aspects des demandes HTTP, mais Curl lui-même peut avoir des goulots d'étranglement de performances pour les demandes simultanées à grande échelle. Pour résoudre ce problème, vous pouvez utiliser la fonction curl_share_init , qui permet à plusieurs demandes de curl de partager la même poignée Curl, de réduire les surcharges de ressources et d'améliorer les performances.

Quelle est la fonction curl_share_init ?

La fonction Curl_share_Init est une fonction fournie par l'extension Curl dans PHP. Il permet à différentes sessions de boucle de partager certaines ressources (telles que les cookies, les informations d'en-tête HTTP, les requêtes DNS, etc.). En partageant des ressources, plusieurs demandes peuvent éviter les processus d'initialisation en double, améliorant ainsi l'efficacité.

Avec CURL_SHARE_INIT, nous pouvons créer une ressource Curl partagée, puis lier plusieurs demandes Curl à cette ressource partagée pour s'assurer qu'ils peuvent réutiliser efficacement la même ressource lorsqu'ils sont traités.

Présentation du client Guzzle HTTP

Guzzle est un client HTTP très populaire dans PHP, encapsule Curl et d'autres méthodes de transport HTTP et fournit une API simple pour envoyer des demandes et recevoir des réponses. L'avantage de Guzzle est qu'il prend en charge les demandes asynchrones, les demandeurs de relance, les demandes simultanées et autres fonctions.

Cependant, l'implémentation par défaut de Guzzle ne prend pas directement en charge le partage des poignées Curl, donc si nous voulons améliorer les performances et partager les poignées Curl, nous devons intégrer manuellement la fonction Curl_share_init .

Comment intégrer la fonction curl_share_init dans Guzzle?

Pour intégrer Curl_share_Init dans Guzzle, nous devons faire une personnalisation de la configuration Curl de Guzzle. Voici un exemple de base de la façon d'utiliser CURL_SHARE_INIT avec Guzzle:

 <?php

use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlHandler;

// Créer un partagé cURL Poignée
$curlShare = curl_share_init();

// Configurer les options de partage
curl_share_setopt($curlShare, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
curl_share_setopt($curlShare, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);

// Créer un Guzzle Client
$stack = HandlerStack::create(new CurlHandler());
$stack->push(function($request, $options) use ($curlShare) {
    // Obtenir cURL Poignée并与共享Poignée绑定
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $request->getUri());
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SHARE, $curlShare);

    // Exécuter une demande
    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}, 'curl_share_handler');

$client = new Client(['handler' => $stack]);

// Envoyer une demande
$response = $client->request('GET', 'http://m66.net/someendpoint');

// Réponse d&#39;impression
echo $response->getBody();
?>

Dans cet exemple, nous créons d'abord une ressource curl partagée $ curlshare et configurons les ressources à partager via Curl_Share_Setopt (telles que les cookies et DNS). Nous créons ensuite une HandLerst Back de Guzzle personnalisée et ajoutons la logique de traitement personnalisée à la pile via la méthode Push . Dans la logique de traitement, nous créons explicitement une poignée Curl et la lions à la ressource partagée à l'aide de Curl_setopt .

Améliorer les performances à l'aide de curl_share_init

Lorsque nous partageons les poignées Curl entre plusieurs demandes HTTP, nous pouvons réduire efficacement la surcharge de chaque demande. En particulier dans les demandes simultanées à grande échelle, Curl_share_Init peut réduire le temps pour initialiser à plusieurs reprises les poignées Curl et partager des ressources telles que les cookies, le DNS, etc., améliorant ainsi la vitesse de traitement des demandes.

Par exemple, dans un scénario avec plusieurs demandes, après avoir utilisé CURL_SHARE_INIT , chaque demande peut partager des informations et des cookies DNS, évitant ainsi les requêtes DNS en double et le traitement des cookies, qui est une amélioration significative des performances.

résumé

En intégrant la fonction Curl_Share_Init dans Guzzle ou dans d'autres clients HTTP, nous pouvons partager des poignées Curl, améliorant ainsi l'efficacité de la gestion des demandes. Les ressources partagées réduisent non seulement les opérations en double, mais améliorent également la vitesse de réponse des demandes, en particulier adaptée aux environnements de concurrence élevés. La méthode d'intégration Curl_share_init dans Guzzle est relativement simple, et nous pouvons gérer efficacement plusieurs demandes HTTP en personnalisant la pack Handlerst et en configurant correctement la poignée partagée Curl.