mmofacts.com

Cronjob?

gepostet vor 15 Jahre, 8 Monate von BES_1973

Mein Spiel kommt nun in eine Phase wo ein Cronjob notwendig wird.

Der Provider von meinem Webspace bietet keinen Cronjob an.
Daher wollte ich fragen ob schon jemand Erfahrung mit www.cronjob.de?

Gäbe natührlich die Möglichkeit, die Berchnungen bei jedem Seitenaufruf auzuführen, das würde aber pobleme geben, da Nachts kaum einer Klickt und so die Berechnugen teilweise bis zu 6 Std. nicht ausgeführt werden.

gepostet vor 15 Jahre, 8 Monate von abuzeus

Das ist ja erstmal nicht so schlimm. Du könntest theoretisch beim ersten Aufruf eines Users einfach nachsimulieren, was in der "klicklosen" Zeit passiert ist. Dabei ist dann natürlich Zinseszins und so weiter zu beachten. Und es kann beim ersten Klick nach der langen Nacht ein bisschen dauern, bis alles up to date ist. Das nur als Alternative. Mit cronjob.de kenne ich mich nicht aus.

gepostet vor 15 Jahre, 8 Monate von Fobby

Ich habe die Erfahrung gemacht, dass auch Nachts immer noch vereinzelt User online sind. Irgendwer treibt sich immer im Game rum, egal ob es 18:00 oder 4:00 ist. Es kommt nun darauf an, was der Cronjob tun soll - ich nehm einfach mal an, nichts userspezifisches. Aber es lässt sich durchaus so regeln, dass ein beliebiger Klickender den Pseudocronjob triggert.

gepostet vor 15 Jahre, 8 Monate von Toby

Und wenn du den User diesen Pseudocronjob per AJAX-Request triggern lässt, fällt ihm das wahrscheinlich nicht mal auf, das da was größeres passiert. ;)

Generell würde ich mich aber nicht auf einen externen Cronjob verlassen, zumindest nicht darauf, das der auch immer "pünktlich" ist. Irgendeine leichte Störung im Netz und dein Cronjob steht.

gepostet vor 15 Jahre, 8 Monate von BES_1973

Der Cronjob sollte sollche Sachen berechenen, wie Müdigkeit, UV-Belastung, Sauerstoff/Co² verbrauch.
Und auch laufende Kämpfe. (für jeden User)

Ich werde mal 2 Testscripts schreiben, und dann schauen was für mich in Frage kommt.
(Der eine wird aufgerufen durch Userklick und der andere durch den Externen Cronjob)
Der Test wird für die User auch unsichtbar sein, da es reine PHP-Scripts sind und nur in die DB schreiben, wann sie aufgerufen wurden (Logdatei).

gepostet vor 15 Jahre, 8 Monate von darken

Du könntest ja einfach bei deinem Hoster anfragen, ob sie dir nicht einen Cronjob einrichten, fragen kostet ja nichts

gepostet vor 15 Jahre, 8 Monate von DrakeL

Original von Toby

Generell würde ich mich aber nicht auf einen externen Cronjob verlassen, zumindest nicht darauf, das der auch immer "pünktlich" ist. Irgendeine leichte Störung im Netz und dein Cronjob steht.

Dem kann ich mich anschließen. Solang du dafür sorgst, dass deine Skripte problemlos damit klar kommen, dass der Cronjob auch mal paar Minuten später oder früher läuft sehe ich da kein Problem.

Mit der von dir angegebenen Seite hab ich eher wenig Erfahrung, ich hatte mich registriert aber nicht eingesehen, dass ein CronJob Service meine komplette Anschrift braucht. Also habe ich Pseudodaten eingetragen und wurde auf Lebenszeit gesperrt. :)

Seitdem nutze ich folgenden Service: http://www.cron-job.org/cgi-bin/cronweb

Er läuft zuverlässig bei mir jeden Tag, allerdings immer mehrere Minuten Verspätung.

gepostet vor 15 Jahre, 8 Monate von BES_1973

Original von darken

Du könntest ja einfach bei deinem Hoster anfragen, ob sie dir nicht einen Cronjob einrichten, fragen kostet ja nichts

 Hab mal bei T-Offline angerufen  und doch Fragen kostet.
Und nein selber bieten sie keinen Cronjob an und nun der HAMMER,
jeder externe Cronjob wird von T-Offline blockiert (angeblich).

Damit hat sich meine Frage schon erledigt.
Nun kann ich einen ellenlagen Script schreiben der ewig zurükrechnet.

gepostet vor 15 Jahre, 8 Monate von Kallisti

Vielleicht solltest du dann ein Browsergame nicht bei T-Online hosten? Oo

Abgesehen davon sind remote cronjobs doch nichts als getriggerte HTTP Aufrufe, oder? Wie wollen sie das bitte blocken? Jegliche wiederkehrende Requests blocken? Das hieße man müsste alle Requests loggen...

Ich glaub zumindest eine Seite eures Gespräches wusste nicht wirklich worum es geht? ;)

gepostet vor 15 Jahre, 8 Monate von BES_1973

Ich denke mal, dass er nicht wusste was ich genau meinte. Und deswegen hat er gesagt das geht gar nicht.
Wie oben geschrieben werde ich trotzdem 2 Scripts anlegen und beide Varianten testen.

gepostet vor 15 Jahre, 7 Monate von rami95

Original von DrakeL

Seitdem nutze ich folgenden Service: http://www.cron-job.org/cgi-bin/cronweb

Er läuft zuverlässig bei mir jeden Tag, allerdings immer mehrere Minuten Verspätung.

Seitdem cron-job.org mal tot war, habe ich das wichtigste nach cronjob.de verlagert. aber ansonsten ist der org-Service echt klasse.

Wenn ich ihn alle 2 Minuten laufen lasse udn er ne Verspätung von z.B. 4 Minuten hat, fällt es auch keinem auf. Und ob um 01 oder 02 - hauptsache der Intervall stimmt.

gepostet vor 15 Jahre, 7 Monate von BES_1973

Danke für die Infos. 

Hab mich für Cronjob.de entschieden, auch wenn die Aufrufe ungenau sind, aber ich glaube nicht dass eine Verspätung von 1-2 Minuten in einem Echtzeitspiel gross auffällt.

Derzeit hab ich noch einen Testscript zu laufen, damit ich sehe wie zuverlässig der Cronjob funktioniert.

gepostet vor 15 Jahre, 7 Monate von Dunedan

Original von BES_1973

[...] auch wenn die Aufrufe ungenau sind, aber ich glaube nicht dass eine Verspätung von 1-2 Minuten in einem Echtzeitspiel gross auffällt.

gepostet vor 15 Jahre, 7 Monate von Bringer

Original von BES_1973

Hab mich für Cronjob.de entschieden, auch wenn die Aufrufe ungenau sind, aber ich glaube nicht dass eine Verspätung von 1-2 Minuten in einem Echtzeitspiel gross auffällt.

Kommt zwar drauf an wo (es auffällt), aber ich denke, das du von z.B. deinem Auto erwartest das es startet wenn du den Zündschlüssel umdrehst. Uns zwar sofort - nicht mit 1-2 Minuten verspätung (könnte beispielsweise auf einem Bahnübergang unangenehm werden...)

Wenn du in einem "Echtzeitspiel" z.B. die Resourcenberechnung alle 1-2 min laufen lässt muss das nicht zwingend Probleme ergeben, aber mach dasselbe mal bei einem Kampf zwischen 2 Kontrahenten

Und es gibt zig bessere Beispiele, wo ein zu früh/spät gestarteter Cronjob absolut sinnfrei ist.

gepostet vor 15 Jahre, 7 Monate von Kallisti

Ich denke es mal es steht nicht zur Diskussion, dass die Berechnung von Events in einem Echtzeitspiel auf Cronbasis absolut ungeeignet ist.

Direkt im aufrufenden Script (Problem Crossabhaengigkeiten und Performance Peaks) oder Daemon, alles andere ist eine Kruecke.

Klar, fuer einige wiederkehrende Berechnungen kann man auch gern Cron nutzen, wie beispielsweise die Erzeugung statischer Statistiken oder irgendwelche taeglich anfallende Dinge wie Kostenabrechnungen.

gepostet vor 15 Jahre, 7 Monate von BES_1973

ich werde es so machen, dass die Berechnungen vom Cronjob aufgerufen werden.
Sollte der Cronjob noch nicht gestartet sein bei einem Klick wo die Berechnung durchgeführt sein sollte, wird diese halt mit dem Klick gestartet und ausgeführt.

Damit hab ich eine kleinere Zeitdifferenz, als wenn die Berechnungen nur per Klick aufgerufen werden und ich einen Script schreiben muss, der u.U. 10 Std. zurückrechnet.

Für mein Spiel sind 2-3 Min Zeitdifferenz durchaus akzeptabel, was die Hintergrundberechnungen angeht.
Die Berechnung für das beenden von Arbeitsgängen oder Kampfscripts wird dann im Notfall per Klick aufgerufen.

Das sind dann zwar 2 Scrips und auch 2 Cronjobs + 1 per Klick, das ist aber denke ich die beste Lösung für mein Problem.

Man muss ja immer sehen, was ist gegeben und was möchte ich haben. Dann heisst es immer das besste draus machen. Und ich denke das ist die besste Variante.

gepostet vor 15 Jahre, 6 Monate von s1x

Da hier ja gerade darüber diskutiert, beschreibe ich mal wie ich das ganze Regel.

Ich benutze die Cronjobs nur für "Programme" die länger als ein paar Sekunden gehen zum ausführen.
Dazu gehören bei mir folgende Sachen:

  1. Börsenende, sprich erstellung der Statistiken für die Unternehmen die notiert in der Börse sind. (täglich 20:00 Uhr)
  2. Aktualisieren von Punkten (Spieler, Städte) sowie der Rangliste (täglich um 24:00 Uhr)
  3. Aufräumen der Datenbank(markierte Spieler löschen markierte Logs löschen [..]) (23:59 Uhr)
  4. Datenbank optimieren (täglich alle sechs Stunden)
  5. Ausführen von militärischen Aktionen (Angriffe, Transporte, [..]) (24:00,02:00,04:00,06:00 Uhr)*

* Werden normalerweise beim Aufruf eines Spielers der online ist ausgeführt, habe dies aber noch mit einen Cronjob unterstüzt so das man wenn man als erster sich in das Spiel einloggt alle militärischen Aktionen ausgeführt werden und so das Spiel sozusagen ein paar Sekunden hängt.

Alles andere hingegen lass ich nachberechen. Sprich ebenfalls die Ressourcen, Gebäude und so weiter. Das ganze ist aber Spielerspezifisch, sprich nur wenn sich der Spieler einloggt werden seien Daten aktualisiert. Besteht der Fall dass Spieler A den Spieler B angreifen oder z.B. spionieren möchte, werden, bei Spieler B der sich aber seit Wochen nicht mehr eingeloggt hat die Ressourcen geadded, Gebäude in der Bauschleife sowie die Einheiten aus der Bauschleife vor dem Angriff geadded. Sprich bei jeder Aktion werden die Sachen kurz davor nachberechnet. Empfand ich als die schonenste Variante anstatt alles immer berechnen zu lassen, und sogenannte Ticks wollte ich nicht im Spiele haben.

Auf diese Diskussion antworten