Ankündigung

Einklappen
Keine Ankündigung bisher.

Countdownakualisierung Clients bei MySQL Datenbank veränderungen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Countdownakualisierung Clients bei MySQL Datenbank veränderungen

    So da ich nicht genau weiß wo das hingehört und auch neu hier bin hoffe ich mal das ich bei PHP für Fortgeschrittene Hilfe bei der Lösung meines Problemes bekomme.

    Vorab eine kurze Erklärung: Ich entwickel derzeit eine Seite auf der knapp 60 verschiedene Countdowns mit Namen abegrufen werden. Dazu wird aus einer MySQL Datenbank ein Name und ein Timestamp ausgelesen. Mit dem Timestamp und der aktuellen Zeit berechne ich dann die verbleibende Zeit für den Countdown und lasse diesen Runterzählen. Dazu benutze ich AJAX und JavaScript sowie MySQL abfragen in PHP.

    Die Countdowns können jederzeit verändert werden indem der Timestamp um 30 Sekunden bei einer interaktion hochgesetzt wird.
    Das Problem bei dem ganzen ist nun das alle Clients immer synchron sein müssen und es keine abweichung geben darf. Heißt bei einer veränderung des Timestamps müssen alle Clients in Echtzeit ihre Countdowns akutaliserien.

    Bei meinem ersten Versuch hat dabei jeder Client über AJAX jede Sekunde auf die Datenbank zugegriffen und die neuen Timestamps in einen lokalen Array geschrieben. Dies hat zwar funktioniert jedoch kam bei 20 Nutzern meine Datenbank dann schon an ihre Grenze. (Waren einfach viel zu viele Abfragen).

    Nach ein bisschen überlegen bin ich dann auf die Idee gekommen das die Clients ja nur aktualsiert werden müssen wenn sich an der Datenbank überhaupt was ändert. Habe dazu nur noch einen Datenbankzugriff der meine Timestamps in eine .data Datei schreibt sobald sich etwas ändern/ also jemand mit der Webseite interagiert. Die Clients greifen nun also jede Sekunde auf die datei zu lesen nur noch aus der Datei sekündlich alles ein anstatt aus der Datenbank.

    Das Problem hierbei ist jetzt das es nicht ganz wie gewünscht funktioniert und ich denke aufgrund der Preformance die Aktualiserung eine Moment dauert wenn der Nutzer interagiert.

    Ich hoffe einer hier hat eine Idee wie man das ganze eleganter Lösen kann.

    Danke schonmal im Vorraus.

    P.S Die letzte Idee die ich hatte war statt einer Datei die Timestamps in einem Serverseitigen Cache zu speichern auf denn die Clients jede Sekunde zugreifen. Habe davon leider nicht so viel ahnung und weiß daher nicht ob das überhaupt so funktioniert wie ich es mir vorstelle.

  • #2
    Es muss lediglich die Datenbank gepollt werden... egal ob verändert oder nicht. Es macht aber kaum Sinn einen Timer runterzuzählen, wenn jede Sekunde die Datenbank auf Veränderungen gecheckt werden muss. Da kannst auch gleich die verbleibende Zeit statisch anzeigen.

    Heißt bei einer veränderung des Timestamps müssen alle Clients in Echtzeit ihre Countdowns akutaliserien
    Du kannst nicht zum Client pushen, deswegen gibt es diese Form der Aktualisierung mit PHP nicht (im Sprachgebrauch hiesse das "broadcast", ie eine Nachricht an alle..)

    Heisst: der Client (Browser) muss permanent den Status aktualisieren um Veränderungen mitzubekommen.. daß das bei steigender Zahl Clients unperformant wird ist kein Wunder.

    Anstatt Datenbank oder Datei (ganz schlecht) : Denke über "Memcache" als Medium nach.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Danke für die schnelle Antwort Istegelitz.


      Kommentar


      • #4
        vielleicht würde Dir das LISTEN / NOTIFY - Konzept von PostgreSQL das Leben einfacher machen. Dein Client registriert sich an der DB, diese informiert ihn, wenn sich was ändert.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Werde ich mir gleich mal anschauen. Danke für den Tipp.

          Das Problem ist nur das ich für mein Projekt nur einen Strato FTP Zugang habe mit 2 MySQL Datenbanken.

          Hat einer evtl noch eine Idee aus außer die Datenbank zu pollen? Bez falls ich das mit dem pollen machen wie weit kann ich die Datenbank dann auslasten bei sekündlichen abfragen? Habe da noch keine Erfahrungen bei Strato gemacht.

          Kommentar


          • #6
            Mit einem Standart Webhosting Paket wirst du wahrscheinlich nicht weit kommen, wenn es auch noch eine maximal execution time gibt, die du nichts umgehen kannst, dann bleibt dir wirklich nichts anderes übrig.

            Vielleicht wäre Websocket was für dich, damit kannst du dann vom Server aus Nachrichten an die Clients pushen, aber auch das geht auch einem 0815 Hostpaket nicht
            Fatal Error: Windows wird gestartet

            Wie administriert man ein Netzwerk: Beispiel

            Kommentar

            Lädt...
            X