Frage zu Cron-Job

djjlx

---???---
ID: 62937
L
9 Mai 2006
599
21
Hy!

Hätte mal eine kleine Frage bezüglich Cronjobs!

Zeitgesteuerte freischaltungen werden die mit Cronjobs gemacht?

Genauer:
Meist bei Browser Games verwendet wenn man zb. sich was baut und die Bauzeit beträgt 2h dann läuft meist ein Countdown bis das Gebäude fertig ist und wenn man das baut und erst in 4h wieder online ist dann zb. produziert das gebäude schon 2h. Daraus schließe ich das wenn die 2h Bauzeit vorbei sind das zb. ein SQL Befehl läuft der sagt das ab jetzt das gebäude fertig ist und produziert.

Ich hoffe ich hab mich halbwegs verständlich ausdrücken können!

Werden solche Sachen mit Cron-jobs gemacht?

Danke

LG
 
Werden solche Sachen mit Cron-jobs gemacht?

Genau, dafür bieten sich Cronjobs an. Um gleich mal beim Thema Gebäudebau zu bleiben: Da kannst du z. B. eine Datei erstellen, die überprüft, ob ein Gebäudebau fertig ist und die Produktion gestartet werden soll oder ob eben der Bau noch nicht fertig gestellt ist. Die Datei kannst du dann zu bestimmten Zeiten von deinem Cronjob aufrufen lassen.
 
Ja das ist mir klar aber soweit ich das nun mitbekommen habe kan man einen Cronjob einstellen das er zb. alle 25 min prüft ob der Bau fertig ist und die Produktion gestartet werden soll.

Wie funktioniert das dann mit dem Countdown?
Wenn jetzt der bau 2h02m30s dauert das der Cronjob genau nach dieser zeit "zuschlägt" dafür aber nur einmalig und auf produktion umstellt. Dann bräuchte man ja für jeden User & jedes Gebäude einen eigenen Job oder sehe ich das falsch?

Lg
 
Für solche Einsatzzwecke ist ein Cron-Job total ungeeignet.

Vernünftiger Weise implementiert man das so, dass beim nächsten "Zugriff" auf das Gebäude (Login, Angriff etc.) überprüft wird, ob ein Gebäude fertig gebaut wurde und die Ressourcen dann zurückgerechnet und gutgeschrieben werden.
 
Wie funktioniert das dann mit dem Countdown?
Wenn jetzt der bau 2h02m30s dauert das der Cronjob genau nach dieser zeit "zuschlägt" dafür aber nur einmalig und auf produktion umstellt. Dann bräuchte man ja für jeden User & jedes Gebäude einen eigenen Job oder sehe ich das falsch?
Du lässt ganz einfach alle paar Minuten den Cronjob laufen. Und der muss das ja nicht für jeden User einzeln machen. Du kannst die Datei, die aufgerufen wird, so programmieren, dass alle Gebäude, die sich aktuell im Bau befinden, auf die Fertigstellung überprüft werden.

Vernünftiger Weise implementiert man das so, dass beim nächsten "Zugriff" auf das Gebäude (Login, Angriff etc.) überprüft wird, ob ein Gebäude fertig gebaut wurde und die Ressourcen dann zurückgerechnet und gutgeschrieben werden.
Und viele Angriffe laufen ebenfalls per Cronjob. Oftmals findet die Bewegung ja in Ticks statt... also bist du wieder beim Thema Cronjob gelandet ;).
Was jetzt die bessere Variante ist kann man natürlich drüber streiten, obwohl es mit Sicherheit auch auf die jeweilige Situation drauf ankommt. Wenn du bei jeder Aktion erst mal x Millionen Gebäude prüfen und zurückrechnen musst finde ich das nicht so toll...
 
dabu schrieb:
Du lässt ganz einfach alle paar Minuten den Cronjob laufen. Und der muss das ja nicht für jeden User einzeln machen. Du kannst die Datei, die aufgerufen wird, so programmieren, dass alle Gebäude, die sich aktuell im Bau befinden, auf die Fertigstellung überprüft werden.
Wenn mein Gebäude in 10 Sekunden fertig gebaut ist, will ich es in 11 Sekunden nutzen. Kann ich dann aber nicht, weil dein Cronjob noch nicht gelaufen ist...
dabu schrieb:
Und viele Angriffe laufen ebenfalls per Cronjob. Oftmals findet die Bewegung ja in Ticks statt... also bist du wieder beim Thema Cronjob gelandet ;).
Was jetzt die bessere Variante ist kann man natürlich drüber streiten, obwohl es mit Sicherheit auch auf die jeweilige Situation drauf ankommt. Wenn du bei jeder Aktion erst mal x Millionen Gebäude prüfen und zurückrechnen musst finde ich das nicht so toll...
Du prüfst nicht x Millionen Gebäude sondern nur die für jeweiligen User der sich gerade eingeloggt hat. Auch für Angriffe halte ich das nicht für optimal. Lieber ne Endzeit für den Angriff in der DB festelegen und das dann in Realtime bei einem Aufruf des entsprechenden Users berechnen. Sonst hast du durch den Cronjob immer Zeitverschiebungen, das freut den User nicht wirklich.

Ein Cronjob eigenet sich z.B. für automatisierten Mailversand, alle 30 Minuten 500 Stück oder so um den Server nicht zu sehr auf einmal zu belasten oder die maximale Ausführzeit von php Skripten zu umgehen. Oder um auf ein Browsergame zurück zu kommen umfangreiche Statistikberechnungen einmal täglich, Ranglisten updaten (fals man das nicht in Realtime macht), automatisierte DB Backups...