Aktualisieren Sie die Seite immer noch manuell? Es ist Zeit für Echtzeit
\n\nStellen Sie sich vor: Sie öffnen eine Online-Börse, und der Dollarkurs bleibt wie angewurzelt stehen. Sie drücken F5, drücken nochmal – und er ändert sich nicht. Kommt Ihnen bekannt vor? Und jetzt stellen Sie sich vor, der Kurs aktualisiert sich von selbst, wie im Film – fließend und ohne Verzögerungen. Das ist keine Magie, das sind Echtzeit-Technologien. Sie verwandeln eine statische Website in einen lebendigen Organismus: Chats, Benachrichtigungen, Dashboards mit Echtzeit-Updates.
\n\nHeute analysieren wir die vier Säulen, auf denen das gesamte Echtzeit-Web basiert: Long-Polling, WebSockets, Server-Sent Events (SSE) und Comet. Ich zeige Ihnen, wie sie "unter der Haube" funktionieren, und gebe fertigen PHP-Code, den Sie sofort verwenden können. Los geht's!
\n\nDieser Artikel wurde für das Bildungsportal pythonlib.ru geschrieben – hier verwandeln wir komplexe Konzepte in verständliche Werkzeuge.
\n\nKurz und knapp: Was verbirgt sich hinter den Begriffen?
\n\nWenn Sie eine normale Seite öffnen, sendet der Browser eine Anfrage, der Server antwortet – die Verbindung wird geschlossen. Ganz einfach. Aber was, wenn der Server selbst bei Ihnen "anklopfen" möchte, um neue Daten zu senden? Hier beginnt die Bastelei.
\n\n- \n
- Long-Polling (Lange Abfrage) – der alte, aber zuverlässige Großvater. Der Client "hängt" am Server und wartet darauf, dass dieser sich herablässt zu antworten. \n
- WebSockets (Websockets) – der Trend der letzten Jahre. Ein vollwertiger bidirektionaler Kanal, wie eine Telefonleitung. \n
- Server-Sent Events (SSE) – eine unidirektionale Übertragung vom Server zum Client. Ideal für Nachrichtenfeeds und Kurse. \n
- Comet – ein Oberbegriff für Techniken, bei denen der Server Daten ohne zusätzliche Anfrage zum Client "durchdrückt". Long-Polling und SSE sind Spezialfälle von Comet. \n
Technologie Nr. 1: Long-Polling – der Großvater von Echtzeit
\n\nLong-Polling bedeutet, dass der Client zum Server sagt: "Ich warte, so lange es nötig ist, antworte einfach, wenn Daten verfügbar sind." Der Client öffnet eine Verbindung und hält sie offen, bis der Server eine Antwort sendet. Nach Erhalt der Antwort erstellt der Client sofort eine neue Anfrage. Es entsteht eine endlose Kette.
\n\nVorteile: Funktioniert auf jedem Hosting, erfordert keine zusätzlichen Bibliotheken, wird von allen Browsern unterstützt.
\nNachteile: Viele unnötige Header, Serverlast, Verzögerungen bei vielen Clients.
\n\nBeispiel in 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; // warte maximal 30 Sekunden\n$start = time();\n\n// Simuliere das Auftreten neuer Daten\n$data = getNewDataFromDB(); // Ihre Funktion zum Abrufen von Daten\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); // schlafe 0,5 Sekunden\n $data = getNewDataFromDB();\n}\n\necho json_encode(['status' => 'ok', 'data' => $data]);\nflush();\n?>\n\nAuf dem Client (JavaScript) sieht das so aus:
\n\nfunction longPoll() {\n fetch('/long_polling.php')\n .then(response => response.json())\n .then(data => {\n if (data.status === 'ok') {\n console.log('Neue Daten:', data.data);\n // aktualisiere die Benutzeroberfläche\n }\n longPoll(); // sofort eine neue Anfrage erstellen\n })\n .catch(error => {\n console.error('Fehler:', error);\n setTimeout(longPoll, 1000); // nach einer Sekunde neu verbinden\n });\n}\nlongPoll();\n\nSehen Sie? Der Client hängt, wartet, erhält Daten – und hängt sich wieder auf. Das ist Long-Polling in PHP in seiner reinsten Form.
\n\nTechnologie Nr. 2: WebSockets – bidirektionale Datenautobahn
\n\nWebSockets