Andi van W: Deamon und Datenaustausch mit diesem

Guten Tag,

ich plane zur Zeit einen Deamon in PHP zu schreiben.
Dieser soll eine Verbindung mit verschiedenen Spieleservern offen halten und den dort geführten Chat bereit halten.

Meine erste Frage:
Sollte ich je Server einen "Childprozess" starten? Der die Komunikation übernimmt?

Nun zu meinem etwas wichtigeren Problem:
Angenommen der Deamon hält die Daten (Chat, Spielerevents, ...) vor und würde auch eventuelle Befehle an den Server erledigen können (Kick, Ban, ...), dann müsste ich diesem Deamon noch die Befehle übergeben, bzw. die Chatdaten von diesem Abrufen können. Der Abruf würde über ein per AJAX aufgerufenes PHP-Script laufen, das wie bei normalen Webseiten nach dem Abruf beendet ist. Nur wie kann das Script die Daten aus dem Deamon abrufen?

Bei allen Methoden die ich mir bisher angeschaut hatte, kam die Frage des gleichzeitigen Zugriffs auf. Dadurch hatte ich bei den bisherigen Methoden nicht wirklich was gefunden.
Dabei hatte ich mir shared_memory, msg_get_queue und sockets angeschaut.

Den Aufbau stelle ich mir grob so vor:

viele Clients (sehen den Chat und können Kicken/Bannen, ...)
| (1)
ein PHP-Deamon (oder pro GameServer) (Überträgt Befehle zum Gameserver und hält den Chat vor)
| (2)
Game-Server (Sendet bei einem Event die Daten zum Deamon

Bei (2) kann ich mir auch vorstellen, dass der Server jeweils ein script aufruft und dieses im hintergrund, wie bei den Clients, die Daten an den Deamon weiter gibt. Daten die von den Clients zum Server gesendet werden, können natürlich auch direkt dort ausgeführt werden und müssen nicht über den Deamon laufen, dieser würde durch die Events auf dem Server indirekt informiert über die Aktionen.

Wäre es eventuell Sinnvoller, das ganze über die, gut zu strukturierende, DB zu lösen? Wenn nichts los ist, würde so kaum Traffic erzeugt und mit der DB arbeite ich ja eh für andere Daten.

Wichtig: Ich möchte das mit PHP lösen, da dies bei uns die meisten können und keine Speziellere Konfiguration der Server nötig ist. (ggf. muss natürlich ein Modul ergänzt werden, aber das zähle ich nicht zu spezielle Konfig)

Zum Gameserver: Dieser kann je Event einzelne Infos absenden oder in dauerhaften Verbindungen die Daten zurück geben. Hier ist also beides möglich.

MfG Andi

  1. Hello Andi,

    zunächst einmal solltest Du klären, ob Du die Aufgabe wirklich über das Protokoll HTTP/s lösen möchtest, oder ob da nicht ein zustandsorrientiertes Protokoll besser wäre.

    Als Datenaustauschbasis bieten sich übrigens bis zu einer bestimmten Zugriffsrate/Sekunde immer noch Dateien an.

    Wieviele Spieler sollen denn nachher mitspielen dürfen?
    Welche Aktualitätsrate benötigen die? Regelmäßig Updates der Daten im Frontend, oder nur auf Abruf?

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://restaurant-zur-kleinen-kapelle.de
    1. Hello Andi,

      zunächst einmal solltest Du klären, ob Du die Aufgabe wirklich über das Protokoll HTTP/s lösen möchtest, oder ob da nicht ein zustandsorrientiertes Protokoll besser wäre.

      Hier bin ich für Vorschläge offen, hab mich da nicht auf etwas speziell festgelegt. Die Gameserver werden per rcon angesprochen. Was dann normalerweise per udp passiert.

      Als Datenaustauschbasis bieten sich übrigens bis zu einer bestimmten Zugriffsrate/Sekunde immer noch Dateien an.

      Wieviele Spieler sollen denn nachher mitspielen dürfen?
      Welche Aktualitätsrate benötigen die? Regelmäßig Updates der Daten im Frontend, oder nur auf Abruf?

      Daran hatte ich auch schon gedacht, dafür erwarte ich aber in der Tat zu viele Zugriffe. Schreibend pro Sekunde etwa 5-10 Zeilen (nur der Chat). Abrufend würden dann vllt. 2-3 Clienten (Server-Admins bzw. OPs alle paar Sekunden per Ajax die neuigkeiten benötigen um den Chat mitlesen zu können. (das jeweils pro Server gesprochen und ich rechne hier mit einigen Servern. Allein ich habe 12 Stück, die darüber laufen werden. Befreundete Admins kommen noch auf weit mehr. Aus den vom Server abgerufenen Daten sollen auch Statistiken erstellt werden die für alle Spieler bereit gestellt werden. Pro Server können hier schnell bis zu 64 Leute sein. Daher hatte ich Dateien ausgeschlossen, da der gleichzeitige Zugriff mir zu unsicher erscheint.

      Es handelt sich dabei um verschiedenste Spiele die per rcon gesteuert werden können (bzw. über andere freidokumentierte Schnittstellen - kommt aber erst später hinzu)

      Abschließend noch ein "FROHES NEUES" an alle.

      Gruß Andi