Spielsteuerung im Hintergrund

Patrizier Sven

Möglichkeiten

Um die einzelnen Ereignisse innerhalb des Spieles abzuarbeiten fallen mir auf Anhieb drei Möglichkeiten ein. Als erstes könnte man die nötigen Berechnungen durchführen, wenn ein Benutzer eine Webseite im Spiel aufruft. Die zweite wäre ein Cronjob, der in möglichst kurzen Intervallen aufgerufen wird um die Aufgaben zu erfüllen. Als letztes ein Daemon, der permanent die Aufgaben erfüllt.

Aufruf durch den Spieler

Eine in meinen Augen nur für simple Aufgaben geeignete Methode ist die Resourcenberechnung beim Abruf von einzelnen Webseiten. Wenn hier die Berechnungsgrundlagen aufwendiger oder die Menge einfach größer wird, geht die Geschwindigkeit der Serverantworten in den Keller. Es ist einem Nutzer nicht zumutbar, bei jedem Seitenaufruf einige Sekunden warten zu müssen – so sind 2 Sekunden bei Webseiten schon mächtig langsam.

Abarbeitung durch einen Cronjob

Ein Cronjob hat den Vorteil, das auch Aktionen berechnet werden können, wenn kein Spieler im System unterwegs ist. Des Weiteren können die Berechnungen durch die erlaubten längeren Skriptlaufzeiten auch mehr Zeit in Anspruch nehmen, wenn PHP über die Shell aufgerufen wird. Je nachdem wie viele Tasks im Hintergrund zu berechnen sind, ist so ein Cronjob schon völlig ausreichend. Problematisch wird dies erst, wenn der minimale Abstand von 1 Minute zwischen zwei Aufrufen nicht mehr ausreicht.

Daemon im Hintergrund

Am besten finde ich einen Daemon, ein Programm welches permanent im Hintergrund wartet und anfallende Aufgaben erledigt. Zur Steuerung käme z. B. eine einfache Queue per Datenbanktabelle in Frage, wo die Aktionen gespeichert werden. Dies hat auch zu Folge, das man die Ausführung der Aktion sekundengenau starten kann. Da der Daemon die gesamte Zeit läuft, und die Aufgaben permanent abarbeitet, dürfte auch kein „Rückstand“ für die Aktionen entstehen. Falls dem doch so ist, wird einfach ein zweiter Daemon gestartet, natürlich mit entsprechenden Mechanismen, dass nicht beide die selben Aktionen gleichzeitig ausführen.


»«

2 Kommentare zu “Spielsteuerung im Hintergrund”

  • Andrej sagt dazu:

    Am besten ist es einen Deamon zu nehmen der als Kontrollprogramm läuft und für die notwendeigen Aufgaben dann den dafür vorgesehenen Daemon startet. Dadurch ist auch parallelität im Programmablauf gewährleistet (insofern die Hardware und BS dies unterstützt)

    Antworten
  • Marc sagt dazu:

    Das Problem bei Aufrufen durch den Nutzer entstehen schnell Probleme mit dem zeitlichen Ablauf der Ereignisse (A griff B an, B hat nur noch reduzierte Ressourcen, hat aber zu einem späteren Zeitpunkt automatisiert C angegriffen. Dadurch entsteht ein ellenlanger Rattenschwanz, der dann quasi an einem Nutzer „hängen“ bleibt.

    Ein Deamon hätte auch noch den Vorteil, dass man eine Interaktionsmöglichkeit für einen Admin implementieren könnte..

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.