# Server/Client Struktur?



## raven (12. Feb 2009)

Hallo,

Ich habe mal eine rein theoretische Frage zu der Struktur/Aufbau einer Server-Client-Anwendung. Besser gesagt zu einem Server-Client-Spiel. Also zum Beipsiel man möchte ein Netzwerkspiel programmieren, in den sich mehrere Spieler einloggen können. Da wirft sich mir folgende Frage auf! Wie sieht die Strucktur eines solchen Server-Client-Spiels aus. Ich erwarte hier keine Codebeispiele oder ähnliches. Möchte dir Frage nur rein theoretisch klären.

Also nach meiner Meinung nach ergeben sich doch zwei Varianten, wie man seine Netzwerkübertragung strukturieren könnte. Ich werde hier mal meine beide Varianten darlegen, wie ich mir das vorstelle. Ihr könnt mir ja dann sagen ob ich mir das so richtig vorstelle oder ob ich in genau die falsche Richtung denke. Und wie man es besser machen könnte. Also effektiver für das Netzwerkt, das am wenigsten Daten übermittelt werden. Ich nicht sinnlos Daten hin und her geschoben werden, die gar nicht nötig sind.

Variante A:
Jeder Client erhält am Anfang des Spiel seine Daten und übermittelt seine Spielerdaten(Name, x- & y-Koordinate usw.) an den Server. Der Server dient nur als Datenverteiler und schickt alle Daten, die er von jedem einzelnen Clienten empfangen hat, an jeden Clienten wieder zurück, das somit jeder Client die Daten von jedem Spieler hat und somit die Spielsituation darstellen kann. Also sprich der Client ist für Sache wie Kollision usw verantwortlich. Die Rechenarbeit wird somit auf jeden Clienten verteilt, aber auch immerwieder doppelt durchgeführt, da ja jeder Client nach Kollision testen muss.

Variante B:
Der Server besitzt alle Spielerinformation, wie Name und Koordinaten. Der Client übermittelt nur seine Tätigkeit, also sprich Springen, nach links laufen, nach rechts laufen usw. Der Server verarbeitet die Information mit Hilfe der Information vom Client und setzt die Koordinaten nach rechts oder links und testet auf Kollision usw... Nach dem Test, schickt er nur die Koordinaten zurück, die abhängig davon sind ob der Spieler kollidiert ist oder nicht. Ist er kollidiert, verändern sich die Koordinaten zum Beispiel anders, als wie der Spieler es beabsichtigt hatte.

Ich hoffe ihr habt meine grundlegende Frage und meine beiden Varianten verstanden! Ich möchte jetzt wissen, welche der beiden Varianten die besten ist und welche generell in Netzwerkspielen verwendet werden. Oder gibt es noch andere Varianten, die ich hier nicht genannt hatte. Sind diese anderen Varianten vielleicht besser geeignet.

mfg raven


----------



## tuxedo (12. Feb 2009)

Ich denke das kommt auf das Spiel an. Aus "Sicherheits- und Konsistenzgründen" würde ich zu Variante B tendieren.

Sicherheit wegen:

Wir ein Client auf irgend eine Art und Weise modifiziert oder der Netzwerktraffic verändert, so gibt es keine zentrale Instanz die überprüfen kann ob das auch alles seine Richtigkeit hat.

Konsistzenz wegen:

Wenn der Server nur "Verteiler" spielt ist es nicht gesagt, dass alle Spieler zur gleichen Zeit den gleichen Zustand/Status haben. Evtl. dauert das übertragen zu Spieler B etwas länger als zu Spieler A. Dann kann es sein dass es bei Spieler B schon gar keine Kollision mehr gibt weil er sich weiter bewegt hat, wohingegen Spieler A von dieser Bewegung noch nichts mitbekommen hat und mit einer Kollision kalkuliert.

Variante B ist auch die Variante die bei gängigen MMORPGs ala Lineage2 oder World of Warcraft zum Einsatz kommt. 

Würde i.d.R. also zu B tendieren.

- Alex


----------



## raven (12. Feb 2009)

Danke dir, auf genau so eine Antwort habe ich gewartet. Konnte mir schon denken das Variante B die geeignetste ist, jedoch wollte ich  noch einmal Rat dazu hören...

Danke...

mfg raven


----------

