Was verbirgt sich hinter der „Live“-Datenaktualisierung? Wir verstehen die Echtzeit-Technologien
\n\nHaben Sie sich jemals gefragt, wie ein Chat funktioniert, bei dem Nachrichten sofort ankommen, oder ein Börsenticker, der sich von selbst aktualisiert? Die klassische HTTP-Anfrage (bei der der Browser den Server anklopft und der Server antwortet) ist hier ungeeignet – zu langsam und ineffizient. Man braucht die Magie der Echtzeit.
\n\nAuf Stack Overflow hat die Frage „What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?“ tausende Aufrufe. Das bedeutet, dass Verwirrung bei diesen Begriffen normal ist. Heute bringen wir Ordnung in die Sache, schreiben echten PHP-Code und verstehen, wann welche Technologie eingesetzt wird.
\n\nWir werden keine komplexen Frameworks verwenden – nur reines PHP und ein paar beliebte Bibliotheken. Los geht's!
\n\n1. HTTP Polling (Einfache Abfrage) – der Urvater der Technologien
\n\nBevor wir über Fortgeschrittenes sprechen, erinnern wir uns an das grundlegende Polling. Der Client (JavaScript) sendet einfach alle N Sekunden eine Anfrage an den Server. Der Server antwortet: „Keine neuen Daten“ oder „Hier sind die Daten“.
\n\nPHP-Code (Serverseite):
\n<?php\n// polling_server.php\nheader('Content-Type: application/json');\n\n// Simuliere Datenabruf\n$data = ['message' => 'Hallo um ' . date('H:i:s')];\necho json_encode($data);\n\n\nClientseite (JavaScript):
\nsetInterval(() => {\n fetch('polling_server.php')\n .then(response => response.json())\n .then(data => console.log(data.message));\n}, 3000); // Alle 3 Sekunden\n\nVorteile: Einfachheit. Nachteile: viele unnötige Anfragen, Serverlast, Verzögerung von bis zu N Sekunden. Für einen Chat ist das der Tod.
\n\n2. Long-Polling – ein eleganter Umweg
\n\nLong-Polling ist eine verbesserte Version des Polling. Der Client öffnet eine HTTP-Anfrage, und der Server antwortet nicht sofort, wenn keine Daten vorhanden sind. Er hält die Verbindung offen (wartet). Sobald Daten erscheinen, sendet der Server die Antwort und schließt die Verbindung. Der Client öffnet sofort eine neue Anfrage.
\n\nAus Clientsicht ist es ein normaler fetch. Aus Serversicht muss man „schlafen“ und aufwachen können.
\n\nBeispiel für Long-Polling in PHP
\n<?php\n// long_polling.php\nheader('Content-Type: application/json');\nheader('Cache-Control: no-cache');\n\n// Simuliere das Warten auf neue Nachrichten (z.B. aus einer Datei oder DB)\n$lastCheck = time();\n$timeout = 30; // maximal 30 Sekunden warten\n\nwhile (time() - $lastCheck < $timeout) {\n // Prüfen, ob neue Daten vorhanden sind\n $newData = checkForNewMessages(); // Ihre Funktion\n if ($newData !== null) {\n echo json_encode(['status' => 'ok', 'data' => $newData]);\n exit;\n }\n // 1 Sekunde schlafen, um die CPU nicht zu belasten\n sleep(1);\n}\n\n// Wenn 30 Sekunden lang keine Daten kamen – leere Antwort senden\necho json_encode(['status' => 'timeout', 'data' => null]);\n\n\nWichtig: Ersetzen Sie in einem echten Projekt sleep(1) durch usleep(500000) (0,5 Sek.) und verwenden Sie nicht-blockierende Prüfungen (z.B. filemtime() für eine Datei oder SELECT ... FOR UPDATE mit Timeout in der DB).
Wo verwendet: Alte Chats, Benachrichtigungen auf Websites ohne WebSockets. Nachteil: immer noch viele Verbindungen, der Server verbraucht Ressourcen für „hängende“ Anfragen.
\n\n3. Server-Sent Events (SSE) – einseitiger Kanal vom Server
\n\nSSE (Server-Sent Events) ist eine in HTML5 integrierte Technologie. Der Server kann jederzeit Daten an den Client senden, aber nur in eine Richtung (Server → Client). Der Client ist ein normaler EventSource in JavaScript.
\n\nSSE ist ideal geeignet für: Nachrichtenfeeds, Kurse, Logs, Benachrichtigungen.
\n\nPHP-Code (Server):
\n<?php\n// sse_server.php\nheader('Content-Type: text/event-stream');\nheader('Cache-Control: no-cache'