Timer programmieren im Backend?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
oder geht es auch einfacher?

Oh ja, sogar viel einfacher:

  1. Beim Anlegen eines neuen Timers speicherst du neben den sonstigen Angaben wie z.B. Timer-ID, Beschreibung (optional), Gruppen-ID, usw. noch exakt zwei weitere Dinge: Die aktuelle Systemzeit des Servers (Startzeit des Timers) als Unix-Zeitstempel (Anzahl der Sekunden seit 01.01.1970 00:00:00) und die Laufzeit des Timers in Sekunden.
  2. Beim Abrufen des Timers nimmst du dir Beschreibung (optional), Startzeit und Laufzeit aus der Datenbank.
  3. Dann nimmst du die aktuelle Systemzeit des Servers (ebenfalls wieder als Unix-Zeitstempel) und ziehst den Startzeitpunkt davon ab. Damit hast du die im Moment gelaufene Zeit des Timers.
  4. Als nächstes werden Beschreibung (optional), momentane Laufzeit und Gesamtlaufzeit an den Client übermittelt.
  5. Alles weitere ist ab hier "Darstellungszeugs" und sollte daher im Frontend geregelt werden.

P.S.: Auf diese Weise hast du für jeden Timer höchstens zwei Schreibzugriffe: Beim Anlegen und beim Löschen. Außerdem reicht es damit aus, z.B. alle paar Minuten den lokalen Datenstand mit dem des Servers abzugleichen, was den Server in nicht geringem Maße entlastet.

bishare 
Fragesteller
 04.08.2022, 09:27

sehr schöne antwort, vielen dank!

0

Du verrätst herzlich wenig über deine Applikation. Ist das eine Webapp oder was? Sind die Clients ständig verbunden, und womit? Was soll denn passieren, wenn die Zeit abgelaufen ist?

Allgemein wird es sinnvoll sein, für die betreffende Gruppe nur den absoluten "Endzeitpunkt" in der zentralen Datenbank zu speichern (wenn du nichts anderes hast um so einen relativ flüchtigen Zustand zu speichern, etwa Redis). Die Clients können sich dann selbst darum kümmern, einen hübschen Countdown bis zu diesem Zeitpunkt anzuzeigen - d.h. das ständige Aktualisieren passiert gar nicht im Backend.

Tipp: am besten alles in UTC oder der Einfachkeit halber gleich als sekundengranularen Unix Timestamp speichern. Es geht ja offenbar eh nur um die Zeitdifferenz.