Evergore

Evergore Rebirth Game Engine

Was ist die Evergore Rebirth Game Engine?

Evergore wird nicht wie die meisten Browserspiele durch PHP Scripte, einer externen Datenbank und einem Webserver betrieben. Eine eigens entwickelte C++ Engine verarbeitet alle Webseiten-Anfragen (HTTP-Requests) und die Speicher-residente Datenbank ermöglichst schnellsten Zugriff auf die Spieldaten.
Spielinterne Ereignisse können somit problemlos, neben den Webseiten-Anfragen, in Echtzeit verarbeitet werden.

Technik: Webserver

Alle HTTP Anfragen werden, wie von jedem Webserver auch, über einen Socket angenommen. Funktionen verarbeiten die Anfragen und erstellen die angeforderte Webseiten. Die Verarbeitung der Anfragen läuft bewusst Single-Threaded (nacheinander). Dies ermöglicht eine saubere Verarbeitung, ohne dass es durch parallel laufende HTTP-Requests zu spielinternen Exploit-Situationen kommen kann. Durch die extrem schnelle Verarbeitung der Anfragen (<1ms je Webseite) bringt diese Art der Verarbeitung keine Gefahren mit sich. Im Vergleich dauerte ein HTTP-Request in Evergore mit PHP, Apache2 und mySQL etwa 400 bis 600 ms.

Technik: Datenverwaltung

Die spielinternen Daten liegen auf der Festplatte in XML Dateien vor. Wir haben uns bewusst für diese Art der Speicherung entschieden, da hier eine sehr leichte objektorientierte Datenverwaltung möglich ist. Beim Start der Engine werden die Daten aus den XML Dateien via STL Containerklassen (C++ Standard Template Library) in Speicher geladen und verwaltet.
Die Datenverwaltung in Evergore läuft nicht auf der Basis einer RDBMS sondern objektorientiert. Um dies zu verdeutlichen, besitzt z.Bsp. jedes Charakter-Objekt eine Liste mit all seinen Gegenständen. Um auf diese Zugreifen zu können, muss nicht erst eine Abfrage auf eine Tabelle gemacht werden, in der alle Gegenstände gespeichert sind.

Technik: Exception Handling

Die Rebirth Game Engine besitzt neben dem normalen Exception Handling auch ein zusätzliches Signal Handling, was unvorhergesehene Fehler abfängt und diese durch eine bestimmte Funktion behandelt. Falls ein Fehlersignal auftritt, sichert die Engine automatisch die Spieldaten (in XML Dateien auf der Festplatte) und beendet sich anschließend selbst (Shutdown). Jede durchlaufene Funktion und Objektmethode fügt eine Zeile mit zusätzlichen Informationen in einen Puffer, der im Falle eines Shutdown ausgegeben wird.

Technik: Daemon Prozess

Ein Dämon (Überwachungsprozess) überprüft in einem festgelegten Intervall, ob der Engine Prozess noch läuft. Falls dies nicht der Fall ist, wird die Engine mit den zuletzt gespeicherten Spieldaten automatisch neu gestartet.
Der Daemon Prozess leitet alle Ausgaben in eine Datei (Logfile) um, und sendet diese im Falle eines Neustarts per Email an die Evergore Administration. Falls noch Fehler auftreten, können diese sehr gezielt analysiert und behoben werden.

Vergleich und Fazit

Um die 3 Welten Ankrador, Bandrakon und Dunladan betreiben zu können benötigten wir vor der Rebirth Game Engine zwei Server, die nahezu ausgelastet waren.
Seit Ende März 2007 laufen alle 3 Welten mitsamt Homepage, Forensystem und Supportsystem auf einem einzigen Server (Opteron 148, 2GB RAM). Die maximal gemessene CPU-Auslastung je Engine (Welt) beträgt ungefähr 3% zur Hauptzeit (~500 Spieler online).