Matze: Timer mit Usereinfluss, Idee, Konzept, Umsetzung?

Hallo,

ich möchte einen rückwärts laufenden Timer programmieren.
Der Timer läuft z.B. 12 Stunden, oder auch nur 10min rückwärts und löst dann eine Funktion aus.
Die Daten würde ich in einer Datenbank speichern und nach abgelaufener Zeit löschen.

Das könnte man wahrscheinlich alles noch mit ein paar if(), ein bisschen Rechnerei und time() erledigen.

Dazu soll sich aber auch ein grafischer Balken entsprechend abwärts/rückwärts bewegen.
Das ist dann wahrscheinlich mit einem AJAX-Request der jede Sekunde anspringt und einer Funktion die den Balken steuert auch schnell erledigt.

Jetzt kommt aber mein Problem...
Der Benutzer soll den Counter mit seinem Klick auf einen Button beeinflussen können.

Z.B. $timer = 12h.
1. Für alle 100 Benutzer in der ersten Stunde wird 1h dazu addiert. Z.B. 450 Benutzer = $timer+4h.
2. Für alle 200 Benutzer in der zweiten Stunde wird 1h dazu addiert. Z.B. 500 Benutzer = $timer+2h.
3. Für alle 400 Benutzer in der dritten Stunde wird 1h dazu addiert. Z.B. 630 Benutzer = $timer+1h.
.......................
.......................
.......................

Das ganze soll sich solange fortsetzen bis nicht mehr genügend Klicks aufgebracht werden können und der Counter auslaufen kann.

Die Zahlen der Benutzer und die Zeiten sind nur Beispiele und müssen sicher angepasst werden oder können dynamisch eingestellt werden.

Bei einem kurzen Counter von z.B. 10min und wenig erwarteten Klicks z.B. 2/min wären die Auswirkungen dann bei der grafischen Darstellung des Timers deutlicher zu sehen.

Hat jemand eine Idee wie ich das am besten umsetzen könnte?
Und bitte laaaaamgsam, damit mir nichts entgeht ;)

Danke und Grüße, Matze

  1. Moin Moin!

    Das klingt alles sehr wirr. Insbesondere die Geschichte mit dem Addieren und den vielen Benutzern. Was willst Du wirklich erreichen?

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. Hallo Alexander,

      Das klingt alles sehr wirr. Insbesondere die Geschichte mit dem Addieren und den vielen Benutzern. Was willst Du wirklich erreichen?

      ich hab mir den Kopf zerbrochen wie ich am besten erklären kann was ich erreichen will...
      Kennst du vom Sat1-Frühstücksfernsehen noch diese Morningstars?

      1. Es läuft ein Timer ab (Liedlänge)
      2. Je mehr Leute für "gut" anrufen, desto länger läuft der Timer
      3. Je mehr Leute für "lieber doch nicht^^" anrufen, desto schneller läuft der Timer ab
      4. Timer abgelaufen -> Ende

      Im Prinzip will ich also sowas machen, nur im Netz und ohne Morningstar ;)
      Was in der Zeit passieren soll in der der Timer abläuft tut ja auch nicht so viel zur Sache.

      Grüße, Matze

  2. Hi!

    ich möchte einen rückwärts laufenden Timer programmieren.
    Der Timer läuft z.B. 12 Stunden, oder auch nur 10min rückwärts und löst dann eine Funktion aus.

    Muss die Funktion/Aktion wirklich genau am Ende der Laufzeit gestartet werden? Dann benötigst du einen irgendwo ständig laufenden Dienst, der das Ende bemerkt und dann zuschlägt.

    Oder reicht es, wenn alle Jubeljahre mal einer klickt, dass dann festgestellt werden kann, dass die Laufzeit abgelaufen ist, schnell die Aktion durchgeführt wird und das Ergebnis dann angezeigt wird?

    Üblicherweise kann eine Aktion nur auf dem Server stattfinden, dann bekommt in der Regel keiner direkt was davon mit. Es sollte also reichen, wenn das Ergebnis abgefragt und präsentiert werden kann, wenn die Zeit vorbei ist.

    Dazu soll sich aber auch ein grafischer Balken entsprechend abwärts/rückwärts bewegen.
    Das ist dann wahrscheinlich mit einem AJAX-Request der jede Sekunde anspringt und einer Funktion die den Balken steuert auch schnell erledigt.

    Dafür braucht es noch kein AJAX. Es muss lediglich auf einen Request hin die Restlaufzeit und ein Stück Javascript geliefert werden. Letzteres sorgt für das Brimborium auf dem Bildschirm und läuft völlig unabhängig vom eigentlichen Timer - egal, ob er nun tatsächlich läuft oder nicht.

    Der Benutzer soll den Counter mit seinem Klick auf einen Button beeinflussen können.

    Für den Fall benötigt man dann doch regelmäßige Requests, die den neuen aktuellen Stand abfragen.

    Hat jemand eine Idee wie ich das am besten umsetzen könnte?
    Und bitte laaaaamgsam, damit mir nichts entgeht ;)

    Erklär erst einmal etwas genauer, was das für eine Aktion sein soll, damit man sich Vorstellungen machen kann, wie das günstigst erledigt werden kann.

    Lo!

    1. Hallo dedlfix,

      Oder reicht es, wenn (..)

      reicht.

      (..) und läuft völlig unabhängig vom eigentlichen Timer - egal, ob er nun tatsächlich läuft oder nicht.

      Das soll aber so schnell wie möglich festgestellt werden.
      In meinem Beispiel dürfte das aber unglaublich viel Traffic verursachen:
      Bsp.: 500 User auf der Seite, im Hintergrund läuft jede Sekunde 500 mal ein Request der den aktuellen Status des Timers abfragt/aktualisiert + die Requests die ausgelöst werden wenn der Benutzer den Timer verändert.

      Erklär erst einmal etwas genauer, was das für eine Aktion sein soll, damit man sich Vorstellungen machen kann, wie das günstigst erledigt werden kann.

      bitte schön :)

      Grüße, Matze

      1. Hi!

        (..) und läuft völlig unabhängig vom eigentlichen Timer - egal, ob er nun tatsächlich läuft oder nicht.
        Das soll aber so schnell wie möglich festgestellt werden.

        Da der Timer in jedem Fall auf dem Server verwaltet wird und der Server die Teilnehmer nicht selbst benachrichtigen kann, müssen diese gelegentlich nachfragen. Je öfter, desto mehr Last erzeugt es. Das musst du entscheiden, wie wichtig dir eine Aktualisierung ist. Die Anzeige beim User läuft sowieso immer eigenständig. Wenn zwischen den Requests der Timer verkürzt wurde, gibt es immer eine Aktualitätsunstimmigkeit.

        Erklär erst einmal etwas genauer, was das für eine Aktion sein soll, damit man sich Vorstellungen machen kann, wie das günstigst erledigt werden kann.
        bitte schön :)

        Viel Erleuchtung über die Aktion steht da nicht. Ich gehe mal davon aus, dass das was einfaches ist, also das Ändern eines Datensatzes, der dann bei weiteren Requests das Ende des Timers signalisiert und daraufhin ein anderes Resultat ausgeliefert wird.

        Wichtig ist bei deinem System die Nebenläufigkeit. Du musst sehr darauf achten, dass alle wichtigen Aktionen atomar ablaufen und kein zweiter Request eine gerade laufende Aktualisierung verfälscht. Wenn es schnell gehen muss und die Datenmenge gering ist, sollte eine Datei die bessere Wahl sein als ein Datenbankzugriff.

        Lo!