Skip to content
On this page

Long Polling

Principe

Le Long Polling est une amélioration d'un des inconvénients du Polling qui est que les requêtes sont trop régulières, et peuvent entraîner des erreurs d'affichages de données incohérentes, voir un abondements et un ralentissement général de la bande passante.

Imaginons qu'une requête HTTP vers un serveur prenne 100ms à revenir sous la forme d'une réponse.

Rien ne nous garanti que les requêtes subséquentes arrivent elles aussi après 100ms, peut être qu'un ralentissement des serveurs entraînerait un délai de 1 seconde, voir 5 seconde.

Donc, il faudrait en théorie pouvoir prévoir à l'avance le délai de latence du client au serveur, sauf qu'en pratique c'est impossible techniquement, sauf si on attends que la première requête soit arrivée, avant de passer à la seconde.

Code

Serveur

Encore une fois, étant donnée que cette stratégie est similaire au Polling, elle n'a pas besoin d'être mise en place côté serveur.

Client

Côté client, le code ressemble à s'y méprendre au Polling, sauf qu'il n'est plus question de se baser sur un appel à intervalle régulier, mais à de la recursion.

typescript
function updateAppleShareVisually(json) {
  // Mettre à jour visuellement
  // via l'API Web DOM le cours ici
}

function run() {
  fetch("share.finances.com/apple").then(response => {
    if (response.ok) {
      return response.json();
    }

    throw new Error("Bad response from the server");
  }).then(json => {
    updateAppleShareVisually(json);
    run();
  }).catch(error => {
    console.error(error);
  });
}

run();

Ici, nous appelons la fonction run une seule fois au moment où le script entier chargé et exécuté, puis nous l'appelons chaque fois que nous recevons une réponse et qu'elle est bien au format JSON.

Avantage

C'est une amélioration par rapport au Polling puisque de cette façon, si une réponse arrive dans 10 secondes, il n'y a aucune autre requête en parallèle qui sera lancé, permettant à la fois d'économiser de la bande passante (par rapport au Polling) mais aussi d'éviter d'envoyer trop de requête inutilement, surtout si le serveur mets plus de temps pour répondre.

Inconvénient

C'est néanmoins le seul avantage, puisqu'il conserve les inconvénients du Polling.