Dans PHP, Curl_Multi est un outil très puissant qui est souvent utilisé pour effectuer des demandes HTTP simultanées. Il permet de faire plusieurs demandes de curl simultanément sans avoir à établir une connexion distincte pour chaque demande, améliorant ainsi considérablement l'efficacité des demandes de réseau. Généralement, Curl_Multi est largement utilisé dans des scénarios tels que le traitement de plusieurs appels API externes et l'acquisition par lots de données. Cependant, la façon d'optimiser les performances de ces demandes est un défi commun pour les développeurs lors de la réalisation d'un grand nombre de demandes.
Cet article présentera comment améliorer les performances des demandes Curl_Multi en utilisant la fonction curl_upkeed () .
CURL_MULTI est une fonctionnalité fournie par la bibliothèque Curl qui vous permet d'envoyer simultanément plusieurs demandes HTTP sans attendre que chaque demande se termine séparément. Il peut aider les développeurs à mettre en œuvre des demandes asynchrones et à améliorer l'efficacité de l'exécution du programme.
CURL_UPKEEP () est une fonction PHP personnalisée utilisée pour optimiser la gestion des ressources pendant le traitement multi-request. Il peut garantir que lors de l'exécution de la demande, évitez l'occupation à long terme des ressources du serveur et peut nettoyer et réutiliser régulièrement les poignées de boucle pour maintenir la stabilité du système.
Tout d'abord, assurez-vous que l'extension Curl est activée dans l'environnement PHP. Ensuite, nous montrerons comment implémenter des demandes simultanées via Curl_Multi .
// initialisation curl_multi Poignée
$multi_handle = curl_multi_init();
// initialisation单个 curl Poignée
$handles = [];
for ($i = 0; $i < 3; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://m66.net/api/example" . $i); // Ici URL Utilisé m66.net
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 将Poignée加入 multi
curl_multi_add_handle($multi_handle, $ch);
$handles[] = $ch;
}
// Exécuter une demande
do {
$multi_status = curl_multi_exec($multi_handle, $active);
} while ($active);
// fermeture所有Poignée
foreach ($handles as $ch) {
curl_multi_remove_handle($multi_handle, $ch);
curl_close($ch);
}
// fermeture multi Poignée
curl_multi_close($multi_handle);
Le code ci-dessus montre comment envoyer trois demandes simultanément à l'aide de curl_multi . Notez que le nom de domaine de l'URL a été remplacé par m66.net , ce que vous avez demandé.
Afin d'améliorer les performances des demandes Curl_Multi , nous devons effectuer un nettoyage et une gestion des ressources régulières. La fonction de la fonction curl_upkeed () est de maintenir l'état sain de la poignée CURL pendant le processus de demande, d'éviter les fuites de mémoire et d'assurer l'exécution fluide de la demande.
function curl_upkeep($multi_handle, $handles) {
// Exécuté régulièrement,释放掉已经完成的Poignée
do {
$status = curl_multi_exec($multi_handle, $active);
// Vérifiez si une demande est terminée
while ($info = curl_multi_info_read($multi_handle)) {
if ($info['msg'] == CURLMSG_DONE) {
$ch = $info['handle'];
// Obtenez le résultat de la demande
$response = curl_multi_getcontent($ch);
// Traitement des données de réponse
echo "Données de réponse: " . $response;
// fermeture完成的Poignée
curl_multi_remove_handle($multi_handle, $ch);
curl_close($ch);
}
}
// Contrôler la fréquence d'exécution des demandes,Empêcher une utilisation excessive CPU
usleep(10000); // 10 millisecondes,Évitez excessivement élevé CPU Occupation
} while ($active); // Quand il y a encore une demande lors de l'exécution,Continuer à exécuter
}
La fonction curl_upkeep () vérifiera périodiquement si la demande a été terminée et nettoie la poignée de curl terminée dans le temps. Pendant le processus d'exécution, la charge du système est réduite grâce à des appels appropriés Usle Sleep () pour éviter une utilisation excessive du processeur en raison d'un sondage fréquent.
Maintenant, nous utilisons la fonction curl_upkeed () en conjonction avec Curl_Multi pour optimiser les performances.
// initialisation curl_multi Poignée
$multi_handle = curl_multi_init();
// initialisation单个 curl Poignée
$handles = [];
for ($i = 0; $i < 5; $i++) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://m66.net/api/example" . $i); // Remplacer par m66.net nom de domaine
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 将Poignée加入 multi
curl_multi_add_handle($multi_handle, $ch);
$handles[] = $ch;
}
// Appel upkeep Nettoyage régulier et gestion des ressources des fonctions
curl_upkeep($multi_handle, $handles);
// fermeture multi Poignée
curl_multi_close($multi_handle);
Dans cet exemple, la fonction curl_upkeed () vérifie périodiquement l'état de chaque demande pour s'assurer que toutes les demandes se terminent en douceur tout en libérant les ressources terminées.
En utilisant curl_upkeep () , les performances des demandes Curl_Multi peuvent être efficacement améliorées, les fuites de mémoire peuvent être réduites, les ressources système peuvent être évitées et une vitesse de réponse élevée et une stabilité peuvent être maintenues dans le cas d'un grand nombre de demandes simultanées. De plus, en nettoyant régulièrement les poignées de curl terminées, les programmes peuvent gérer plus efficacement les demandes et les ressources système, améliorant ainsi les performances globales.