L'optimisation des performances est une étape cruciale lors de la création de demandes de lots d'API. À mesure que la fréquence des appels d'interface augmente, les stratégies d'optimisation raisonnables peuvent non seulement réduire les frais généraux de temps, mais également améliorer la réponse et la stabilité du système global. curl_upkeep () dans PHP est un outil puissant pour optimiser les performances des demandes de lots. Dans cet article, nous explorerons en profondeur la façon d'utiliser Curl_upKeep () pour améliorer les performances des demandes de lots d'API et l'illustrer avec un exemple de code.
Dans les applications pratiques, en particulier lors de la réalisation d'un grand nombre d'appels API avec des services externes, le retard des demandes de réseau devient souvent un goulot d'étranglement. Chaque demande d'API implique plusieurs liens tels que la résolution DNS, la connexion TCP, la demande HTTP et la réponse. Le temps consommé par une seule demande peut sembler trivial, mais lorsque le nombre de demandes est important, la perte de temps accumulée peut devenir très considérable. Pour le moment, il est particulièrement important d'optimiser les performances des demandes par lots.
CURL_UPKEEP () est une fonction d'assistance dans PHP qui gère et optimise plusieurs demandes HTTP simultanées via des extensions Curl . Lorsque des demandes de lots API sont nécessaires, la pratique traditionnelle consiste généralement à envoyer des demandes une par une, tandis que curl_upkeep () peut envoyer plusieurs demandes simultanément, améliorant ainsi considérablement l'efficacité d'exécution des demandes.
Les principaux avantages de curl_upkeep () sont:
Demandes simultanées : En traitant plusieurs demandes en parallèle, le temps d'attente est réduit.
Réutiliser les connexions : Curl réutilise les connexions existantes, en évitant les requêtes DNS en double et les poignées de main TCP.
Contrôle flexible : vous pouvez définir le délai d'expiration demandée, le numéro de concurrence et d'autres paramètres pour contrôler le comportement de la demande.
Pour mieux comprendre comment utiliser curl_upkeep () pour améliorer les performances, voici un exemple de code qui montre comment implémenter les demandes de lots d'API et effectuer une optimisation des performances.
<?php
// Simulé API Requête l'adresse
$apiUrls = [
"https://api.m66.net/v1/data/endpoint1",
"https://api.m66.net/v1/data/endpoint2",
"https://api.m66.net/v1/data/endpoint3",
"https://api.m66.net/v1/data/endpoint4",
];
// initialisation cURL multi handle
$mh = curl_multi_init();
// créer cURL Demander un tableau de poignée
$curlHandles = [];
foreach ($apiUrls as $index => $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Définir le délai
// Ajouter la poignée à multi handle milieu
curl_multi_add_handle($mh, $ch);
$curlHandles[$index] = $ch;
}
// Effectuez toutes les demandes et attendez l'achèvement
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
// Résultats de traitement
foreach ($curlHandles as $index => $ch) {
$response = curl_multi_getcontent($ch);
echo "Response from endpoint " . ($index + 1) . ":\n";
echo $response . "\n";
curl_multi_remove_handle($mh, $ch);
curl_close($ch);
}
// fermeture multi handle
curl_multi_close($mh);
?>
Initialiser Curl Multi Manque : Tout d'abord, utilisez CURL_MULTI_INIT () pour initialiser une manche Multi Curl, qui est le cœur de la gestion de plusieurs requêtes Curl.
Définissez une seule demande : Pour chaque URL de l'API, utilisez Curl_Init () pour initialiser une seule poignée de curl et définir ses paramètres de demande (tels que l'URL, le délai d'expiration, etc.).
Ajoutez une demande à plusieurs manches : utilisez curl_multi_add_handle () pour ajouter chaque poignée de demande de curl au traitement multi-manche et démarrer le traitement parallèle.
Exécutez la demande : démarrez toutes les demandes via Curl_Multi_Exec () et attendez que la demande termine à l'aide de Curl_Multi_Select () .
Obtenez et traitez la réponse : une fois chaque demande terminée, vous pouvez utiliser Curl_Multi_getContent () pour obtenir le contenu de la réponse et le traiter.
Nettoyez les ressources : après avoir terminé la demande, utilisez Curl_Multi_Remove_Handle () et Curl_close () pour libérer les ressources, et enfin fermer le manche multi-manche via Curl_Multi_Close () .
Dans les demandes par lots, en plus d'utiliser Curl_upkeed () pour améliorer les performances de la concurrence, les techniques d'optimisation suivantes peuvent également être prises en compte:
Multiplexage des connexions : définissez Curlopt_Forbid_reuse à FALSE pour permettre le multiplexage des connexions, ce qui réduit l'heure de recherche de connexion et DNS à chaque fois que vous demandez.
Demandes asynchrones : procédé aux demandes de traitement de manière asynchrone pour s'assurer que le système ne bloque pas d'autres demandes car il attend une réponse d'une demande.
Traitement des demandes par lots : Si le nombre de demandes d'API est trop grand, vous pouvez les appeler par lots et que chaque lot traite un certain nombre de demandes pour empêcher le système de se bloquer en raison du traitement trop de demandes.
Augmentez de manière appropriée le paramètre de délai d'expiration : pour les demandes qui ne répondent pas pendant longtemps, un délai d'expiration raisonnable peut être défini pour éviter que la demande soit dans un état d'attente.
En utilisant curl_upkeep () pour gérer les demandes de lots d'API, l'efficacité des demandes peut être considérablement améliorée, en particulier lorsque des demandes simultanées sont nécessaires. Le multiplexage des connexions de réglage rationnellement, le contrôle de la concurrence et le délai d'expiration peuvent réduire efficacement le temps total des demandes et améliorer les capacités de réponse du système. Dans les scénarios d'appel API à grande échelle, l'utilisation de techniques d'optimisation rendra le système plus stable et efficace.
Grâce aux exemples et à l'analyse de cet article, je pense que vous avez maîtrisé comment utiliser Curl_upkeep () pour optimiser les performances des demandes de lots d'API.