Curl est l'une des bibliothèques les plus couramment utilisées lors de l'utilisation de PHP pour les demandes HTTP. Grâce à lui, nous pouvons implémenter diverses fonctions, telles que l'envoi de demandes GET ou Post. Pour optimiser les performances, nous voulons parfois être en mesure de réutiliser une connexion déjà établie pour éviter de rétablir une nouvelle connexion à chaque fois, ce qui implique le concept de connexions longues HTTP.
Dans PHP, curl_upkeep () est une fonction qui maintient les connexions longues HTTP. Alors, Curl_upKeep () peut-il vraiment garder la connexion longue HTTP ouverte pendant un certain temps en l'appelant une fois? Cet article discutera en détail de cette question.
HTTP Long Connection (Keep-Alive) est une technologie qui permet à la même connexion entre un client et un serveur d'envoyer et de recevoir plusieurs demandes et réponses en une seule session HTTP. Le protocole HTTP traditionnel établit une nouvelle connexion TCP pour chaque demande envoyée et ferme la connexion immédiatement après l'envoi de la demande. Les connexions longues HTTP évitent les frais généraux de l'établissement et de la fermeture des connexions fréquentes, et peuvent améliorer les performances et réduire la latence.
curl_upkeep () est une fonction qui garantit qu'une connexion Curl est active. Son objectif principal est d'empêcher la fermeture de la connexion lorsqu'il n'y a pas de demandes pendant longtemps. Cela se fait en gardant la connexion active, garantissant que les demandes ultérieures ne nécessitent pas de rétablissement de la connexion.
Voici un exemple simple en utilisant curl_upkeep () :
<?php
// initialisation cURL Session
$ch = curl_init();
// installation cURL Options
curl_setopt($ch, CURLOPT_URL, 'https://m66.net/some-endpoint');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // installation超时时间
// Faire la première demande
$response = curl_exec($ch);
// Appel curl_upkeep() Rester connecté
curl_upkeep($ch);
// Faire une deuxième demande,La connexion sera réutilisée
curl_setopt($ch, CURLOPT_URL, 'https://m66.net/another-endpoint');
$response2 = curl_exec($ch);
// 关闭Session
curl_close($ch);
// Réponse de sortie
echo $response;
echo $response2;
?>
Dans le code ci-dessus, nous initialisons d'abord une session Curl et définissons l'URL demandée et d'autres options via Curl_setopt () . Nous gardons ensuite la connexion en appelant Curl_upKeep ($ ch) , puis lorsque la deuxième demande est effectuée, la Curl réutilise la connexion précédente.
curl_upkeep () maintient simplement la connexion active lorsqu'elle est appelée, mais cela ne signifie pas que l'appeler une seule fois gardera la connexion ouverte pour toujours. La persistance des connexions longues HTTP sera affectée par une variété de facteurs, y compris les paramètres côté serveur, l'environnement réseau et l'intervalle de demande.
Paramètres côté serveur:
Le serveur définit généralement une heure de délai d'expiration, et après cette heure, la connexion sera fermée. Même si le client reste actif, le serveur peut fermer activement la connexion. Par conséquent, le simple fait d'appeler curl_upkeep () peut ne pas garantir que la connexion ne sera pas fermée.
Envoi et multiplexage de connexion:
Si vous souhaitez réutiliser une connexion pour plusieurs demandes, vous devez généralement activer le regroupement de connexion lors de l'utilisation de Curl. Ceci est généralement réalisé via la série de fonctions Curl_Multi_ * . curl_upkeep () ne gère pas directement le regroupement de connexion, il maintient simplement l'activité de la connexion actuelle.
Temps libre pour la connexion:
Si la connexion devient inactive lorsqu'aucune demande n'est effectuée pendant longtemps, le côté serveur ou le proxy intermédiaire peut fermer la connexion. Par conséquent, même si curl_upkeep () est appelé sur le client, les connexions qui sont inactives depuis trop longtemps peuvent toujours être fermées par le serveur ou le proxy.
curl_upkeep () aide à maintenir les connexions longues http actives, mais elle n'est pas polyvalente. Qu'il puisse "maintenir la connexion sans interruption" dépend de plusieurs facteurs, y compris la configuration côté serveur, l'environnement réseau et la fréquence de demande. Par conséquent, curl_upkeep () ne garantit pas nécessairement que la connexion ne se fermera jamais après un appel. Si vous avez besoin d'un mécanisme de réutilisation de connexion plus avancé, vous pouvez envisager d'utiliser la gestion du pool de connexions de Curl ou l'utilisation d'une bibliothèque plus spécialisée pour gérer les connexions longues HTTP.
J'espère que cet article peut vous aider à mieux comprendre le rôle et les limites de Curl_upkeed () .