Rolf B: Tabelle aktualisieren sobald ein neuer Eintrag vorhanden ist?

Beitrag lesen

Hallo Meowsalot,

es gibt mehrere Mechanismen, wie man das erreichen kann. Alle setzen voraus, dass Du am Client JavaScript einsetzt und damit einen Update-Mechanismus baust, der unabhängig vom normalen Seitenupdate die neuen Einträge findet und darstellt. Einige setzen auch voraus, dass Du deinen Server anders baust als gewohnt und sind nicht bei jedem Hoster möglich.

1. Polling.

Wenn Du die Seite regulär sendest, schickst Du eine JavaScript-Zeile mit, die einen "letzter Stand" Marker setzt. Zum Beispiel der Timestamp des neuesten Eintrags, oder die ID (sofern Du aufsteigende IDs vergibst). Per JavaScript erzeugst Du einen Intervalltimer, der per Ajax den Server fragt, ob es was neues gibt. Dabei wird der eben genannte Marker als Parameter übergeben, das per Ajax aufgerufene PHP Script bestimmt das Delta zwischen Marker-Stand und aktuellem Stand und liefert die seitdem entstandenden Einträge und den dafür geltenden neuesten Marker mit. Wenn deine Seite das empfängt, baut es die Einträge ins DOM ein und speichert den gelieferten Marker als aktuellen Marker.

2. Server Sent Events (SSE)

Das ist ein Verfahren, bei dem der Server aktiv Updates sendet, wenn sich eine Änderung ergibt. Mit PHP sind echte SSE schwierig umzusetzen; die diversen Samples, die ich im Netz gefunden habe, sind Fake. Das gleiche gilt für

3. Web Sockets (WS)

Das ist ein neueres Verfahren als SSE und ist in PHP ebenfalls nicht so einfach umzusetzen. Hier können Browser und Server über eine offengehaltene Verbindung ständig Daten austauschen.

Problem bei SSE und WS ist, dass diese Verfahren das klassische Request-Response Prinzip des Web verändern. HTTP ist normalerweise verbindungslos, d.h. sobald ein Request geschickt wurde und die Response vom Server verschickt wurde, weiß der Server nichts mehr davon (außer Session-State). Der Server hält aber keine ständige Information über aktive Clients. Das ist im klassischen Web gut und ressourcensparend. Für interaktive Verfahren wie SSE oder WS ist das anders, da muss sich der Server jeden Client merken. Das kostet deutlich mehr Server-Ressourcen. Und vor allem bedeutet es, dass es auf dem Server einen ständig laufenden Prozess geben muss, der die Client-Verbindungen kennt; das ist KEIN klassisches PHP Script. Es gibt z.B. Ratchet, eine PHP Library für Websockets, aber da startest Du einen PHP-Prozess neben dem Webserver, das geht nicht bei jedem Hoster.

Andersrum kostet auch Polling Ressourcen, weil dann jeder Client ständig Requests an den Server schickt (z.B. im 5- oder 10-Sekunden Takt). Bei 10.000 Clients ist das ein übler Hagel an Anfragen, der den Server oder die DB schnell in die Knie zwingen kann.

Rolf

--
sumpsi - posui - clusi