Rolf B: Variablen auf mehreren Pcs verwenden

Beitrag lesen

Hallo Terandox,

Variablen auf mehreren Systemen "gleichzeitig ändern" geht nicht.

Spätestens wenn Du den Arbeitsspeicher eines Gerätes verlässt (meistens auch schon früher) musst Du auf den Versand von Nachrichtenpakten zurückgreifen. In diesem Moment ist bereits das "gleichzeitig" vorbei, weil die Änderungsmeldung von Gerät A ja erstmal auf die Geräte B,C,D,... transportiert werden muss.

Um die ärgsten Synchronisationsprobleme zu vermeiden, verwendet man daher eine zentrale Instanz, die den Spielstand festhält. Jeder, der etwas am Spielstand ändern will, sendet eine Änderungsmitteilung an die zentrale Instanz. Diese aktualisiert den globalen Spielstand und verteilt an alle angeschlossenen Spieler die neue Situation. Das kann bei kleinen Spielen eine Komplettmeldung sein, das kann aber zu aufwändig werden, und man schickt nur Mitteilungen über das, was sich ändert.

Ganz wichtig ist, dass kein Client seinen eigenen Spielstand ändern darf. Jede Änderung muss als Nachricht zum Server laufen, wird dort verarbeitet und die Folgen dieser Änderung gehen an die Stationen.

Du hast also zwei Aufgaben zu lösen: (1) Programmieren dieser zentralen Instanz (Spielserver) und (2) Erstellen einer bidirektionalen Kommunikation zwischen Server und Clients.

Wenn Du keine Ahnung von SQL und PHP hast, dann guck Dir Node.js an. Der simple Webhoster mit PHP eignet sich ohnehin nicht gut für bidirektionale Kommunikation, da muss man sehr krumme Bocksprünge machen. Problem: Node.js ist eine aktive Komponente (da läuft ständig ein Script), keine reaktive Komponente (die nur auf externe Zugriffe antwortet), deshalb ist das in Billigangeboten nicht drin.

Node.js ist die JavaScript-Engine von Google, die auch in Chrome enthalten ist, aber nicht für's DOM, sondern für den Serverbetrieb. Das ist immer noch eine Lernkurve, aber wenn Du JS schon kannst, ist das vielleicht einfacher. Und du musst den Spielstand nicht in einer DB speichern, sondern kannst ihn im RAM behalten. Wenn ein Server mehrere Spieltische hosten können soll, musst Du natürlich darauf achten, dass sich das nicht vermischt. Eine DB brauchst Du nur, wenn Du bei einem Serverneustart (absichtlich oder wegen Crash) die laufenden Spiele nicht verlieren willst - aber man KANN es auch so lösen, dass man jede Änderung in einer Datei protokolliert und bei einem Neustart den Spielstand auf Grund der protokollierten Änderungen wiederherstellt. Ist der Spielstand nicht zu groß, kann man ihn auch einfach nach jeder Änderung als Komplettdatei raushauen.

Node.js unterstützt, da es eine aktive Komponente ist, Websockets. Das ist State-of-the-Art für bidirektionale Kommunikation. Die programmierst Du nicht selbst an, das ist sehr mühsam, sondern verwendest ein JS Framework dafür. Ich wollte das selbst man anfangen, hatte aber keine Zeit - ich war nur bis zur Auswahl des Frameworks gekommen. Ich hätte socket.io verwendet. Einen Apache kann man dann immer noch daneben stellen, um die statischen Inhalte (HTML, CSS, JS, Grafiken) zu liefern, man muss dann nur auf Same Origin Policy aufpassen.

Wenn Du C# oder VB.net kannst, könntest Du auch an einen ASP.NET Server denken. Neuere Version von .net können Websockets, bei älteren gibt es die Alternative SignalR. Du solltest Dich dann aber mit dem .net Framework oder .net Core Ökosystem auskennen.

Also - alles nicht so einfach. Du könntest Dir auch mal die Board Game Arena anschauen. Dafür musst Du allerdings PHP und SQL können. Die haben ein Framework, dass Dir das meiste bereits abnimmt. Wenn dein Brettspiel selbst erfunden ist, hast Du keine Copyrightprobleme. Ist es bekannt, gibt es drei Möglichkeiten: der Hersteller gibt keine Lizenz, sie warten auf einen der es baut, oder es ist schon da.

Rolf

--
sumpsi - posui - clusi