tas2580
Blog über Webentwicklung

Einfaches Gameserver Webinterface

tas2580  

Wer einen Gameserver betreibt kennt das Problem, immer wenn man des Server starten oder stoppen will muss man sich auf der Konsole anmelden und dort den Befehlt eingeben. Gleiches gilt wenn man die Konfiguration des Servers ändern möchte. Für einen Erfahrenen Admin mag das noch problemlos machbar sein, aber wenn man auch Freunden die Möglichkeit geben will den Gameserver zu nutzen und zu verwalten stößt man hier auf ein Problem. Einige Einstellungen können zwar falls der Gameserver das unterstützt per RCON gemacht werden aber oft werden die Einstellungen beim Mapwechsel wieder überschrieben. Starten kann man den Server auf keinen Fall per RCON da RCON erst verfügbar ist wenn der Server läuft.


Die einfachste Lösung für das Problem wäre ein Webinterface, allerdings gibt es hier kaum fertige Lösungen. Es gibt zwar ein Webinterface von Teklab mit dem sich auch Gameserver verwalten lassen, aber das ist sehr teuer und bringt viele Dinge wie eine Kundenverwaltung mit die man nicht benötigt wenn man einfach nur seinen privaten Gameserver steuern möchte. Ich habe für meinen Gameserver lange nach einer optimalen Lösung gesucht aber nichts gefunden mit dem ich zufrieden war. Also musste mal wieder selber gecodet werden. In meinen ersten Versuchen habe ich einfach die nötigen Befehle per shell_exec von PHP an das Betriebssystem übergeben. Das hat aber mehrere Nachteile, zum einen muss der PHP safe mode ausgeschaltet werden was Sicherheitslücken aufreisen kann und zum anderen muss auf dem Gameserver ein Webserver installiert sein. Außerdem kann man so nicht mehrere Gameserver die auf verschiedenen Maschinen liegen über ein Interface steuern. Die deutlich bessere Lösung liegt darin das man auf dem Gameserver ein Programm installiert das auf einem bestimmten Port horcht und dort Befehle vom Interface entgegen nimmt. Auf meinen Servern habe ich das in Perl umgesetzt, der Code dazu sieht grob folgendermaßen aus:

#!/usr/bin/perl -w

use strict;
use IO::Socket;

my $port = 8055; # Port angeben

# Socket erstellen
my $socket = new IO::Socket::INET (
LocalPort => $port, 
  Listen => 1, 
  Proto  => 'tcp', 
  Reuse  => 1
); 
print "Server gestartet...\n";  # Benutzer volllabern

while() # Dauerschleife zum horchen
{
   my $client = $socket->accept(); # Ankommende Socket Verbindungen annehmen
   $client->recv(my $response, 1024); # Befehl empfangen
   if($response eq "start")  # Wenn "start" gesendet wurde
   {
      system("BEFEHL ZUM SERVER STARTEN");  # Befehl auf Konsole ausführen
      $client->send("Server gestartet"); # Rückgabe an Client senden
   }
   if($response eq "stop") # Wenn "stop" gesendet wurde
   {
      system("BEFEHL ZUM SERVER STOPPEN");  # Befehl auf Konsole ausführen
      $client->send("Server gestoppt"); # Rückgabe an Client senden
   }    
}

Damit lässt sich der Server dann schon mal starten und stoppen, das ganze kann dann noch um weitere Funktionen wie lesen oder schreiben der Config-Datei erweitert werden.

Jetzt braucht man noch das Interface das den Gameserver anspricht, das kann eigentlich mit jeder Programmiersprache die Sockets unterstützt geschrieben werden. Da ich meine Server über ein Webinterface verwalte habe ich es in PHP umgesetzt, der Code dazu sieht folgendermaßen aus:

$host 'localhost';  // Host
$port 8055;  // Port auf dem das Perl Script läuft
$action 'start'// Variable für die Aktion die ausgeführt werden soll

$socket fsockopen($host,$port,$errno,$error,5); // Verbindung aufbauen
fwrite($socket$action); // Befehl an Socket senden
while (!feof($socket)) // Socket lesen
{
    
$tmp fgets($socket); // Rückgabe holen
    
echo $tmp// Rückgabe ausgeben
}
fclose($socket); // Socket schließen

Damit nicht jeder der den Port kennt den Gameserver steuern kann sollte das ganze natürlich noch mit einem Passwort geschützt werden oder man nimmt Befehle nur von einer bestimmten IP-Adresse an.

Das Ganze gibt natürlich nur als Bespiel und sollte auf keinen Fall so 1:1 übernommen werden, aber es zeigt recht gut wie einfach man sich ein Interface für seinen Gameserver selber schreiben kann.


Ähnliche Beiträge


Kommentare


Bitte warten ...

Kommentar schreiben

URLs werden automatisch umgewandelt.
[b]DEIN TEXT[/b] für Fett gedruckt
[quote]DEIN ZITAT[/quote] für Zitate
[code]DEIN CODE[/code] für Code
captcha