Update nach x Sekunden

Acriss

Gesperrt
Hi,
ich würde gerne folgendes realisieren:
Ich möchte einen Update query erst ausführen, wenn eine bestimmte, variierende Zeit vergangen ist. Dies muss auch funktionieren, wenn der Browser offline ist.
Kann mir jemand nen Codeschnipsel oder nen Denkanstoß geben?
 
Also sleep eher nicht,
denn wenn der Browser geschlossen ist, funktioniert das nicht mehr.
Außerdem muss das Script auch weiterlaufen, und darf nicht unterbrochen werden.

Ich benötige das für ein Browsergame, damit Gebäude erst anch 2h oder so fertig gestellt sind.
 
Wenn ich jetzt richtig verstanden habe
Dann würde ich dir zu nen Cronjob raten der alle x sekunden eine DB abfrage startet und die aktuelle Zeit mit der Fertigstellungszeit vergleicht und gegebenenfalls dann Gebäude + 1 setzt.
Wenn du nen eigenen root hasst ist das ja kein Problem. Auserdem gibt es kostenlose hoster die allerdings (die wo ich kenne) nur eine Aktuallisierung alle 10 min zulassen aber zum testen.. dürfte das reichen..

mfg Spikaner
 
Hi,

Ein Script läuft bis zum Ende durch, egal, ob der Browser geschloßen wird oder nicht.

In Deinem Fall (BrowserGame) sollte man eine ganz andere Lösung in Erwägung ziehen:

In der Datenbank wird zum "Gebäude" der Zeitpunkt wann es erstellt wurde mit abgespeichert.
Bei einem erneutem Seitenaufruf wird das Gebäude aktiviert, wenn das Erzeugungsdatum lange genug zurückliegt (muss ja nicht nur durch den Spieler selbst, sondern kann auch durch andere Spieler geschehen).

Man kann dann auch noch Differenzrechnungen vornehmen, also man ermittelt, wielange das Gebäude "eigentlich" schon aktiv sein müsste (da ein Update der Datenbank ja auch erst später erfolgen kann) und kann z.B. die von dem Gebäude produzierten Resourcen hochrechnen.

Ein Cronjob ist hier auch fehl am Platz, da es ja gut sein kann, dass die Fertigstellung des Gebäudes innerhalb der von Spikaner genannten 10 Minuten liegt ... wirkt sich schlecht auf den Spielverlauf aus ;)

Gruß tyg3r
 
Zuletzt bearbeitet:
Ja genau,

Du kannst es auch so machen:

$bauzeit = 60*60; // in sek = 1std

NEW TIMESTAMP(NOW())+$bauzeit // bin mir beim Syntax nicht ganz sicher ;) also Feld vom Typ INT 20

und dann einfach immer testen, ob der in der DB stehende Wert größer als time() ist.

Gruß tyg3r
 
Zurück