Long-Polling, WebSockets, SSE et Comet : Analyse complète avec code PHP

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Vous actualisez encore la page manuellement ? Il est temps de passer au temps réel

\n\n

Imaginez : vous ouvrez une bourse en ligne, et le taux du dollar reste désespérément figé. Vous appuyez sur F5, encore et encore — il ne change pas. Cela vous dit quelque chose ? Et maintenant, imaginez que le taux se met à jour tout seul, comme dans un film — en douceur et sans délai. Ce n'est pas de la magie, ce sont les technologies temps réel. Ce sont elles qui transforment un site statique en un organisme vivant : chats, notifications, tableaux de bord avec mise à jour en temps réel.

\n\n

Aujourd'hui, nous allons décortiquer les quatre piliers sur lesquels repose tout le web temps réel : Long-Polling, WebSockets, Server-Sent Events (SSE) et Comet. Je vais vous montrer comment ils fonctionnent « sous le capot » et vous fournir du code PHP prêt à l'emploi que vous pourrez utiliser dès maintenant. C'est parti !

\n\n

Cet article est rédigé pour le portail éducatif pythonlib.ru — ici, nous transformons des concepts complexes en outils compréhensibles.

\n\n

Bref aperçu : que se cache-t-il derrière ces termes ?

\n\n

Lorsque vous ouvrez une page web classique, le navigateur envoie une requête, le serveur répond — la connexion est fermée. Simple. Mais que faire si le serveur souhaite lui-même « frapper à votre porte » avec de nouvelles données ? C'est là que les choses se compliquent.

\n\n
    \n
  • Long-Polling (Interrogation longue) — l'ancêtre, fiable mais vieillissant. Le client « reste en attente » sur le serveur et attend que celui-ci daigne répondre.
  • \n
  • WebSockets — la tendance de ces dernières années. Un canal bidirectionnel complet, comme une ligne téléphonique.
  • \n
  • Server-Sent Events (SSE) — une diffusion unidirectionnelle du serveur vers le client. Idéal pour les flux d'actualités et les cotations.
  • \n
  • Comet — un terme générique pour les techniques où le serveur « pousse » les données vers le client sans requête supplémentaire. Le Long-Polling et les SSE sont des cas particuliers de Comet.
  • \n
\n\n

Technologie n°1 : Long-Polling — l'ancêtre du temps réel

\n\n

Le Long-Polling, c'est quand le client dit au serveur : « Je vais attendre aussi longtemps qu'il le faudra, mais réponds-moi dès que des données arrivent ». Le client ouvre une connexion et la maintient ouverte jusqu'à ce que le serveur envoie une réponse. Après avoir reçu la réponse, le client crée immédiatement une nouvelle requête. Cela forme une chaîne sans fin.

\n\n

Avantages : fonctionne sur n'importe quel hébergement, ne nécessite pas de bibliothèques supplémentaires, pris en charge par tous les navigateurs.

\n

Inconvénients : beaucoup d'en-têtes superflus, charge sur le serveur, latences avec un grand nombre de clients.

\n\n

Exemple en PHP (Long-Polling)

\n\n
<?php\n// long_polling.php\nheader('Content-Type: text/plain; charset=utf-8');\nheader('Cache-Control: no-cache');\n\n$timeout = 30; // on attend 30 secondes maximum\n$start = time();\n\n// On simule l'arrivée de nouvelles données\n$data = getNewDataFromDB(); // votre fonction pour récupérer les données\n\nwhile (empty($data)) {\n    if ((time() - $start) > $timeout) {\n        echo json_encode(['status' => 'timeout', 'data' => null]);\n        flush();\n        exit;\n    }\n    usleep(500000); // on dort 0,5 seconde\n    $data = getNewDataFromDB();\n}\n\necho json_encode(['status' => 'ok', 'data' => $data]);\nflush();\n?>
\n\n

Côté client (JavaScript), cela ressemblera à ceci :

\n\n
function longPoll() {\n    fetch('/long_polling.php')\n        .then(response => response.json())\n        .then(data => {\n            if (data.status === 'ok') {\n                console.log('Nouvelles données :', data.data);\n                // mise à jour de l'interface\n            }\n            longPoll(); // on crée immédiatement une nouvelle requête\n        })\n        .catch(error => {\n            console.error('Erreur :', error);\n            setTimeout(longPoll, 1000); // reconnexion après une seconde\n        });\n}\nlongPoll();
\n\n

Vous voyez ? Le client reste en attente, reçoit les données — et se remet en attente. C'est ça, le Long-Polling en PHP dans sa forme la plus pure.

\n\n

Technologie n°2 : WebSockets — l'autoroute bidirectionnelle

\n\n

Les WebSockets

Blogs

Book Recommendations