Entwicklerblog: Technische Prozesse im Hintergrund

veröffentlicht am 12.11.2023

In der Vergangenheit von Galaxywars und auch von GigraWars war immer wieder die Rede vom sogenannten Eventhandler. Viele haben schon mal davon gehört, aber zu verstehen, was wirklich dahintersteckt ist noch mal eine andere Sache.

Gelegentlich sind Aussage gefallen, dass das Spiel stillsteht, weil der Eventhandler nicht mehr läuft. Früher war der Grund meist eindeutig, etwas ist kaputtgegangen und das System ist abgeschmiert.

In den vergangenen Jahren war es meist eher eine Überlastung, weil etwa eine ganze Allianz entschieden hat, alle Spieler zu sonden.

Was ist der Eventhandler?

Um das wie zu klären, müssen wir erst einmal verstehen, was der Eventhandler eigentlich ist und was seine Aufgaben sind. Übersetzen wir das Wort ins deutsche, so bekommen wir "Ereignisbehandler", das klingt sehr hölzern, aber ist auch nicht falsch. 

Der Eventhandler arbeitet verschiedene Events, also Ereignisse, ab. Dabei gibt es verschiedene Ereignisse.

  • Gebäude wird fertiggestellt
  • Forschung wurde fertig erforscht
  • Eine Flotte ist an ihrem Ziel angekommen
  • Eine Flotte ist zurückgekehrt

Kein Ereignis, ist das Versenden einer Flotte oder das Starten eines Bauauftrags. Genauso sind auch die Schiffe und Türme in den Bauschleifen vom System ausgenommen.

Theoretisch könnte alles im Spiel als Ereignis abgebildet werden oder auch gar nichts. Bei manchen Aktionen im Spiel wird es aber unangenehm schwierig, wenn sie nicht durch ein Ereignis abgebildet werden. 

Beispiel Rohstoffberechnung

Nehmen wir ein konkretes Beispiel, die Rohstoffproduktion. Es wäre möglich diese als Ereignis abzubilden und beispielsweise jede Sekunde die neu produzierten Rohstoffe dem Planeten gutzuschreiben. Bei vielen Tausend Planeten wären dies dann entsprechend viele Ereignisse, die jede Sekunde berechnet werden müssen.

Wir können uns aber auch neben den Rohstoffen noch die Zeit merken, wann die Rohstoffe zuletzt berechnet wurden. Wenn nun jemand wirklich wissen will, wie viele Rohstoffe auf dem Planeten liegen, dann nehmen wir die Zeit der letzten Berechnung und die aktuelle Zeit und berechnen die fehlenden Rohstoffe für den Zeitraum.

Wie funktioniert der Eventhandler?

Wie wir bereits geklärt haben, arbeitet der Eventhandler Events, also Ereignisse ab. Im Spiel sind die meisten Ereignisse zeitgebunden, sie müssen also exakt zur richtigen Zeit bearbeitet zu werden.

Vereinfacht kann man sich den Eventhandler wie ein eigenes Programm vorstellen, was jede Sekunde nachfragt, ob es ein Ereignis gibt, welches bearbeitet werden soll. Dieses Programm läuft 24 Stunden am Tag, 7 Tage die Woche und damit das gesamte Jahr über.

Die Ereignisse, die bearbeitet werden sollen, werden in einem separaten System gespeichert, in einer sogenannten Message Queue, zu Deutsch "Nachrichten Warteschlange". In unserem Fall können wir das ganze gedanklich vereinfach und sagen, dass diese Nachrichten unsere Ereignisse sind.

Fassen wir also zusammen, der Eventhandler fragt einmal die Sekunde in der Message Queue nach, ob ein Ereignis jetzt gerade (oder früher) fertig ist, um bearbeitet zu werden. Gibt es ein solches Ereignis, dann verarbeitet der Eventhandler dieses. Dies kann dann unter anderem ein Angriff sein.

Entwicklung über die Jahre

Zum Start der ersten Version von GigraWars 2012 sah das System des Eventhandlers noch völlig anders aus als in der aktuell laufenden Version und in der kommenden Version hat sich dabei auch wieder einiges geändert. Vor allem, was die Menge an Ereignissen angeht, die verarbeitet werden können.

In der ersten und in der aktuell laufenden Version läuft immer nur ein Prozess, also Programm, was die Ereignisse abarbeitet. Das heißt, wenn viel los ist, dann stapeln sich die Ereignisse, die abgearbeitet werden wollen.

Geschwindigkeit

Die Geschwindigkeit, in der die Ereignisse verarbeitet werden, hat sich von Spielversion zu Spielversion auch immer wieder verändert. Das gehört zu den Dingen, die immer mal wieder verbessert werden müssen, was als Spieler aber eigentlich nicht zu erkennen ist.

Vergleichen wir einfach mal die Geschwindigkeiten für das Ereignis, wenn eine Flotte im Angriff auf seinem Zielplaneten eintrifft. In der ersten Version von 2012 konnten pro Sekunde ein bis zwei Ereignis verarbeitet werden, theoretisch wäre da wahrscheinlich etwas mehr möglich gewesen, aber das hatte seine Gründe. In der aktuellen Version liegen wir hier bei 38 Ereignissen pro Sekunde. Die ersten Tests der neuen Version zeigen hier eine Steigerung auf 50 Ereignisse pro Sekunde.

Die Zahlen sind lediglich im Verhältnis zu sehen, da es zusätzlich auf die Leistung des Servers ankommt, auf dem diese Anwendungen laufen. Trotzdem kann man sagen, wir haben eine deutliche Verbesserung zwischen den einzelnen Systemen. Die 38 Ereignisse der aktuellen Version resultieren allerdings auch durch eine Optimierung des Systems über viele Jahre.

Die neue Version

Die erwähnten möglichen 50 Ereignisse pro Sekunde in der neuen Version sind allerdings bisher nicht alles. Wie erwähnt lief in den alten Versionen immer nur mit einem Programm, das die Ereignisse abarbeiten konnte. Das hat zum einen eine Auswirkung auf die Geschwindigkeit und zum anderen können Ereignisse sich damit gegenseitig blockieren. Nehmen wir die Allianz, die alle Spieler gesondet hat, davon waren alle Ereignisse betroffen.

Mit der neuen Version haben wir dort nun verschiedene Möglichkeiten. Wir können beispielsweise sagen, dass die Gebäude und Forschungen von einem eigenen Programm abgearbeitet werden. Genauso können wir aber auch sagen, dass wir beispielsweise 2 Programme laufen lassen, nur um die Angriffe abzuarbeiten. Das alles hat seine Grenzen, es bringt beispielsweise nichts 5 Programme laufen zu lassen, die Angriffe abarbeiten, da sich diese dann stark gegenseitig blockieren.

Fazit

Es sollte nun etwas klarer sein, was gemeint ist, wenn über den Eventhandler gesprochen wird und was es bedeuten kann, wenn auf einmal keine Flotten mehr ankommen. Zudem sollte der Ausblick auf die neue Version noch mal ein wenig zeigen, dass alles optimiert werden kann. Wir versuchen stetig, die Prozesse im Hintergrund zu optimieren, um weiterhin ein gutes Spielerlebnis bieten zu können, auch wenn vielleicht gerade Tausende Flotten bei jemand einschlagen.