0Pricing
React Academy · Leçon

Modèle d’interrogation longue et logique de reconnexion

Implémentez l’interrogation longue avec un délai de reprise exponentiel et une reconnexion automatique à l’aide de useEffect et d’AbortController.

Modèle d’interrogation longue et logique de reconnexion est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Fonctionnement de l’interrogation longue

L’interrogation longue fonctionne selon un cycle : le client envoie une requête HTTP, le serveur maintient la connexion ouverte jusqu’à ce que de nouvelles données soient disponibles (ou qu’un délai d’expiration survienne, généralement après 30 à 60 secondes), le serveur renvoie les données, puis le client envoie immédiatement une nouvelle requête. Cela crée une connexion presque continue, avec des caractéristiques d’envoi des données par le serveur.

Implémentation de l’interrogation longue dans useEffect

Dans React, l’interrogation longue utilise une fonction asynchrone récursive à l’intérieur de useEffect. La fonction effectue une requête, traite la réponse, puis s’appelle à nouveau. Un signal d’annulation AbortController arrête la récursion lorsque le composant est démonté. La fonction boucle tant que le composant est monté et qu’aucune demande d’annulation n’a été signalée.

AbortController pour le nettoyage

Créez un AbortController au début de useEffect et transmettez controller.signal à chaque appel de requête. Dans la fonction de nettoyage, appelez controller.abort(). Cela annule toute requête en cours lorsque le composant est démonté, évitant ainsi les mises à jour d’état sur des composants démontés et les fuites de ressources réseau.

Temporisation exponentielle après une erreur

Lorsqu’une requête d’interrogation longue échoue, ne réessayez pas immédiatement : attendez avant la tentative suivante. La temporisation exponentielle double le délai après chaque échec consécutif : 1 s, 2 s, 4 s, 8 s, 16 s, avec un plafond de 30 s. Cela évite de surcharger un serveur défaillant et lui laisse le temps de résoudre les problèmes temporaires. Réinitialisez le délai à 1 s après une réponse réussie.

Ajouter une variation aléatoire à la temporisation

Lorsque de nombreux clients interrogent le même serveur, une temporisation exponentielle sans variation aléatoire provoque un « effet de troupeau » : tous les clients attendent la même durée et réessaient simultanément, ce qui surcharge de nouveau le serveur. Ajoutez une variation aléatoire en modifiant le délai ainsi : delay + Math.random() * delay. Les nouvelles tentatives sont ainsi réparties sur une période donnée, ce qui réduit les pics de charge du serveur.

État de la connexion

Conservez l’état de la connexion afin de refléter le cycle de vie de l’interrogation : isConnecting (connexion initiale ou reconnexion après une erreur), isConnected (dernière interrogation réussie), isError (échecs consécutifs, nombre maximal de tentatives atteint). Affichez cet état dans l’interface afin que les utilisateurs comprennent la fiabilité des données en temps réel.

Afficher le compte à rebours avant la prochaine interrogation

Pendant le délai d’attente avant la nouvelle tentative, vous pouvez afficher un compte à rebours : « Reconnexion dans 8 secondes… » accompagné d’un indicateur de progression. Calculez l’horodatage de la nouvelle tentative lorsque vous configurez le minuteur de temporisation, puis mettez l’affichage à jour chaque seconde. Cette transparence rassure les utilisateurs en leur montrant que l’application tente activement de rétablir la connexion.

setTimeout récursif ou setInterval

Utilisez setTimeout de manière récursive (appelez l’interrogation suivante dans le gestionnaire de réponse) plutôt que setInterval. setInterval se déclenche à intervalles fixes, quelle que soit la durée de la requête précédente : les requêtes longues peuvent ainsi provoquer des interrogations simultanées. Avec setTimeout récursif, l’interrogation suivante ne commence qu’une fois la précédente terminée.

Configuration de l’intervalle d’interrogation

Exposez l’intervalle d’interrogation comme option de configuration de votre fonction : useLongPoll({ url, interval: 5000 }). Les différentes sources de données n’exigent pas la même fraîcheur : un indicateur des utilisateurs connectés peut interroger le serveur toutes les 30 secondes, tandis que l’état d’une tâche peut être vérifié toutes les 5 secondes. Évitez de coder les intervalles en dur dans le code d’implémentation.

Passer de l’interrogation à SSE

À mesure que votre API évolue, vous pouvez remplacer l’interrogation par SSE pour gagner en efficacité. Le composant React qui utilise une fonction d’interrogation doit être découplé de la couche de transport. Si votre fonction expose la même interface (onData, état, erreur), remplacer l’interrogation par EventSource en interne ne nécessite aucune modification du composant qui l’utilise.

Gestion du délai d’expiration côté serveur

Lorsque le serveur maintient une connexion d’interrogation longue et qu’aucune donnée n’arrive, il doit répondre avec un délai d’expiration (200 avec un corps vide ou 204 sans contenu) afin d’éviter que la connexion ne reste bloquée indéfiniment. Le client lance alors immédiatement une nouvelle interrogation. Ce délai d’expiration côté serveur (30 à 60 secondes) est distinct du délai d’expiration des requêtes côté client, qui est plus long, par exemple 90 secondes.

But de la temporisation exponentielle

Pourquoi l’interrogation longue utilise-t-elle une temporisation exponentielle lors des nouvelles tentatives après des erreurs de connexion ?

Récapitulatif de la leçon : interrogation longue

Interrogation longue : le client envoie une requête, le serveur attend que des données soient disponibles ou qu’un délai d’expiration survienne, puis le client envoie immédiatement une nouvelle requête après la réponse. Implémentez-la avec une requête asynchrone récursive dans useEffect et AbortController pour le nettoyage. En cas d’erreur : utilisez une temporisation exponentielle (1 s, 2 s, 4 s… avec un plafond de 30 s) ainsi qu’une variation aléatoire pour éviter l’effet de troupeau. Préférez setTimeout récursif à setInterval afin d’éviter les interrogations simultanées. Suivez l’état isConnecting/isConnected/isError pour informer l’utilisateur.

Questions Fréquemment Posées

La leçon « Modèle d’interrogation longue et logique de reconnexion » est-elle gratuite ?

Oui — le texte complet de « Modèle d’interrogation longue et logique de reconnexion » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Modèle d’interrogation longue et logique de reconnexion » ?

Implémentez l’interrogation longue avec un délai de reprise exponentiel et une reconnexion automatique à l’aide de useEffect et d’AbortController. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Modèle d’interrogation longue et logique de reconnexion » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Comparaison de SSE, WebSockets et de l’interrogation périodique
  2. Consommer des flux SSE dans React avec EventSource
  3. Modèle d’interrogation longue et logique de reconnexion
  4. Créer un flux de notifications en temps réel
← Retour à React Academy