PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Webseite nach Event neu laden


Dirk86
2018-01-23, 22:26:56
Hallo

Ich zeige auf einem TV eine Webseite, die auf eine Datenbank zugreift. Damit die Webseite weiß, wann sie sich neu laden soll, schaut sie auf eine Variable, die in der Datenbank steht. Ich lese diese jede Sekunde aus, heißt, ich greife ständig auf die Datenbank zu und schaue ob in der Variablen „Reload“ steht. Falls ja lade die Seite neu und ersetze „Reload“ durch „Fertig“.

Wenn ich jetzt zb mit dem iPad irgend eine Änderung an der Datenbank vornehme, die auf dem tv angezeigt werden soll, schreibt das iPad „Reload“ in die Datenbank... der restliche Ablauf ist dann hoffentlich klar.

Ist mein Vorgehen klar? Gibt es da keine andere Möglichkeit? Oder stört es nicht, wenn ich zig mal pro Sekunde auf die Datenbank zugreife, nur um zu checken ob der TV-Bank Reliaden muss oder nicht.

Unfug
2018-01-23, 22:39:34
So kann man es machen und ist auch ok. Millionen von Webseiten machen es so. Einer Datenbank ist doch ein Zugriff pro Sekunde völlig egal. Datenbanksysteme sind für wesentlich mehr ausgelegt.

Alternativ, falls Du gerade bock und Zeit hast ... WebSockets.
Hierfür bräuchtest du aber noch ein Server (also nicht direkt auf der Datenbank operieren)

Du baust eine Verbindung zwischen Webseite und Server auf, die quasi immer besteht. Sobald die Variable geändert wird, benachrichgt der Server die Webseite

RattuS
2018-01-23, 22:49:26
Grundsätzlich ist die Vorgehensweise nicht falsch. Flexibler wäre den Zeitpunkt der letzten Änderung an der Datenbank wegzuschreiben und sich dann pro Endgerät zu merken, wann der letzte Reload auf eigener Seite war. Ist der eigene Reload hinter dem der Datenbank, wird reloaded. Aber wenn du nicht mehr als einen Zugriff auf den "Reload"-Datensatz hast, ist das irrelevant. Das sekündliche Abfragen der Datenbank ist absolut unproblematisch - ob das wirklich jede Sekunde notwendig ist, kannst nur du selbst beantworten.

Dein beschriebenes Vorgehen nennt man Polling - ein Pull in regelmäßigen Intervallen. Der andere Ansatz wäre ein Push, der von der Quelle aus alle verbundenen Endgeräte über eine Änderung informiert. Diese Endgeräte empfangen die Benachrichtigung und reloaden dann für sich selbst. Dazu benötigt es aber ein dauerhafte Verbindung, z.B. ein klassischer Socket.

Du bist nicht auf die eingesetzte Technologie eingegangen, aber wenn du "Webseite" schreibst, hast du die Wahl zwischen AJAX für Polling und WebSocket/socket.io für Push.

sei laut
2018-02-02, 10:11:44
Warum erstellt man nicht eine Datei und schreibt dort den Status rein? Dann schaut man dort nach. Ein Dateisystem Zugriff ohne Datenbank ist in der Regel um ein Vielfaches schneller als der Zugriff auf eine Datenbank.

Wenn das aber nur was für dich ist, ist es natürlich egal.

Abnaxos
2018-02-02, 21:33:05
WebSocket gab es schon, bevor es WebSocket gab. ;)

Das hatte verschiedene Namen, z.B. «reverse AJAX». Die Idee besteht darin, dass der Browser grundsätzlich auf die Antwort des Servers wartet, der Server aber eigentlich selber bestimmen kann, wann er die Antwort sendet. Der Server würde also nicht sofort mit «neue Daten» / «keine neuen Daten» antworten, sondern würde stattdessen einfach gar nicht antworten, bis neue Daten verfügbar sind. Für den Browser sieht das aus, als ob der Server überlastet oder die Leitung sehr langsam sei, tatsächlich ist es im Grunde ein Push vom Server an den Client.

Das kann etwas ein Browser-Gefrickel geben, wenn man (aus HTTP-Sicht) unfertige Antworten verarbeiten will, wie das bei Reverse-AJAX üblich war/ist (man liess den Rückkanal für mehrere Antworten offen, musste also Teil-Antworten lesen können, und auch auf Timeouts achten, also vom Server her immer einen Heartbeat durchtröpfeln lassen, damit der Browser den Server nicht für ganz tot hält und die Anfrage abbricht, etc.).

Auf dieser Basis wurde später WebSocket spezifiziert und standardisiert. Wenn WebSocket machbar ist, ist es auf jeden Fall zu bevorzugen.

In so einem einfachen Fall könnte man auf das Feinheiten-Gefrickel verzichten und den Browser einfach in das Timeout rennen lassen, dieses als «keine neuen Daten verfügbar» interpretieren und gleich wieder fragen. Das dürfte zu zeitnaheren Reaktionen bei weniger Datenverkehr führen.

Ectoplasma
2018-02-05, 17:57:21
Wenn man mit WebSockets rumspielen will, kann man das so machen. Bei dieser Art von Anwendung würde ich mir das Leben aber nicht so schwer machen und einfach jede Sekunde nachfragen, so wie der TS es bereits dargestellt hat.
Viel eher würde ich mir überlegen, ob wirklich die ganze Webseite neu geladen muss, oder nur ein bestimmter Bereich via AJAX Call refreshed werden braucht.