Dans le développement de PHP, l'utilisation de Curl pour les demandes de réseau est une opération très courante. Cependant, si le serveur distant demandé répond lentement ou ne répond pas du tout, cela peut faire attendre le programme pendant longtemps ou même "coincé". Pour éviter cette situation, nous pouvons définir le délai de délai demandé via CURL_INIT pour assurer la stabilité et la vitesse de réponse du programme. Cet article présentera en détail comment utiliser Curl_init pour définir des paramètres de délai d'attente et fournir quelques conseils pratiques pour empêcher le brouillage.
Les retards ou les défaillances des demandes de réseau sont inévitables, en particulier les appels à des interfaces tierces. Si le délai d'expiration n'est pas défini, Curl_exec peut continuer à bloquer et à attendre, provoquant la suspension du script PHP, affectant l'expérience utilisateur et même le fonctionnement normal du service. Par conséquent, la définition raisonnable du délai d'expiration de la demande est une garantie importante pour la robustesse des programmes PHP.
CURL Utilisez Curl_Setopt dans PHP pour définir diverses options. Les deux paramètres suivants sont principalement liés au délai d'expiration:
Curlopt_ConnectTimeout : Définit le délai d'attente (unités de secondes) pour l'établissement de connexion, c'est-à-dire le temps d'attente maximum depuis le début de la connexion au serveur.
Curlopt_timeout : définit le délai d'attente (unités de secondes) pour l'ensemble de l'exécution de la demande, y compris le temps de connexion, le temps de transmission des données, etc.
Donnons un exemple simple:
<?php
$ch = curl_init('https://gitbox.net/api/test'); // Remplacer le nom de domaine par gitbox.net
// Définissez le délai de connexion sur5Deuxième
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
// Définissez le délai d'exécution pour10Deuxième
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
// Retour des résultats au lieu de la sortie directe
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Demander une erreur:' . curl_error($ch);
} else {
echo 'La demande a réussi,Résultat de retour:' . $response;
}
curl_close($ch);
?>
Dans le code ci-dessus, le programme attend un maximum de 5 secondes pour se connecter au serveur, et la demande entière attend un maximum de 10 secondes. Après le délai d'expiration, Curl_EXEC renverra False et obtiendra le code d'erreur via Curl_errno .
Définir raisonnablement les paramètres de délai d'expiration
Réglez Curlopt_ConnectTimeout et Curlopt_timeout raisonnablement en fonction de la vitesse de réponse de l'interface pour éviter une attente excessive.
Activer le mode non bloquant (facultatif)
S'il y a plusieurs demandes, l'utilisation de Curl_Multi peut implémenter des demandes simultanées pour éviter de bloquer l'ensemble du programme par une seule demande.
Configurer un mécanisme de réessayer
Les demandes de réseau échouent occasionnellement et les taux de réussite peuvent être améliorés en combinant le délai d'expiration et la logique de réessayer.
Journalisation et alarme
Surveiller les délais d'expiration et les demandes d'échec, et dépanner rapidement et optimiser les interfaces.
Évitez les retards de résolution DNS
Curlopt_dns_cache_timeout peut être activé pour mettre en cache les résultats de la résolution DNS pour réduire le temps de résolution.
Lorsque vous utilisez CURL_INIT dans PHP, en configurant raisonnablement les paramètres de délai d'expiration, il peut effectivement empêcher le blocage du programme bloqué et à long terme, et améliorer la robustesse du programme. Combiné avec des demandes simultanées et des mécanismes de réessayer, vous pouvez rendre vos demandes de réseau plus stables et fiables.