[Netzwerk Logik]Problem mit Positions Synchronisation

07/24/2013 04:00 Conrew#1
Guten morgen liebe Epvpler,

ich habe jetzt schon einige Erfahrungen gesammelt im 2D Spiele Bereich und möchte mich nun an ein Netzwerk basiertes Spiel wagen. Ich habe allerdings ein paar Probleme bei der umsetzung. Insbesonder bei der Positions Synchronisation.

Wie ich es geplant habe würde es im groben so ablaufen:
Hier steht das > für das senden und empfangen etc. ;)


Client bewegt sich > (Positions Packet) > Server
Server überprüft ab bewegung "legal" wenn legal dann:
Server > (Positions Packet) > Alle Clients
Ergo: Bei allen Clients wird der Spieler auf die neue position gesetzt


Ich habe aber das Gefühl das dieses System bei mehreren Clients zu Netzwerklastig ist. Beispiel:

Server läuft auf angepasstem Linux
Server hat eine 100 Mbit/s anbindung
564 Clients Online. Alle bewegen sich.

Bei diesem Beispiel könnte ich mir Vorstellen das der Server ziemlich laggt.
Da ich leider noch relativ neu in der Netzwerk Programmierung bin kann ich das ja nicht so gut einschätzen. Wenn dieses System zu Netzwerklastig ist, könntet ihr mir dann einen Vorschlag zeigen wie es besser ist ?

Freu mich schon auf eure Antwort

MFG Conrew
07/24/2013 05:48 Dr. Coxxy#2
spieler die außer sicht des zielclienten sind garnicht oder nur alle ~5 sekunden übertragen.
07/24/2013 06:02 Conrew#3
Quote:
Originally Posted by Dr. Coxxy View Post
spieler die außer sicht des zielclienten sind garnicht oder nur alle ~5 sekunden übertragen.
Aber ansonsten würde das System so funktionieren ? oder doch zu Netzwerklastig
07/24/2013 09:37 MrSm!th#4
Was hast du denn für gigantische Movepackets, dass 500 Clients reichen, eine 100 Mbit Leitung auszulasten?
07/24/2013 09:52 Conrew#5
Quote:
Originally Posted by MrSm!th View Post
Was hast du denn für gigantische Movepackets, dass 500 Clients reichen, eine 100 Mbit Leitung auszulasten?
Ich kann die Dimensionen von Packets im Verhältnis zu den Leitungen noch nicht so einschätzen. Aber aufgrund der antworten nehme ich mal an das es ohne Probleme funktionieren sollte. Dankeschön :)

MFG Conrew
07/24/2013 13:06 .SkyneT.#6
Quote:
Originally Posted by Conrew View Post
Ich kann die Dimensionen von Packets im Verhältnis zu den Leitungen noch nicht so einschätzen.
Deswegen rechnet man sich das auch aus, oder
lässt es sich einfach beim Server anzeigen.
07/24/2013 21:24 Conrew#7
Quote:
Originally Posted by .SkyneT. View Post
Deswegen rechnet man sich das auch aus, oder
lässt es sich einfach beim Server anzeigen.
Wie genau meinst du das mit ausrechnen ? sry stehe ein bisschen auf dem Schlauch grad :D

MFG Conrew
07/24/2013 22:00 Dr. Coxxy#8
Quote:
Originally Posted by Conrew View Post
Wie genau meinst du das mit ausrechnen ? sry stehe ein bisschen auf dem Schlauch grad :D

MFG Conrew
PacketSize*NumberOfPacketsPerSecondPerClient*Numbe rOfClients

ansonsten einfach mal implementieren und ausprobieren, wozu gibts netzwerkmonitoringtools?
07/24/2013 22:01 YatoDev#9
ein movepacket dürfte doch nur ein paar kilobyte groß sein ? der server sollte di positionen aber abgleichen.

Ich würde die ja so senden :
coordx|coordy|coordz|nochn paar andere sachen
07/24/2013 22:08 dowhile#10
Ein paar Kilobytes? Das sollte doch weit unter einem sein (ein paar Bytes Daten + Header).
07/24/2013 22:19 YatoDev#11
Quote:
Originally Posted by dowhile View Post
Ein paar Kilobytes? Das sollte doch weit unter einem sein (ein paar Bytes Daten + Header).
ja paar kilobytes . ich hatte mal ein kleines server client script da wurde das packet so abgesendet :
Code:
Function|Parameter1|Parameter2|Parameter3|Parameter4|OptionalerParameter|Ip des absenders|ip des servers|ip von dem der die antwort empfängt|timestamp
das dann noch binär und crypted und schon hat man 3 kb
07/24/2013 22:39 Conrew#12
Quote:
Originally Posted by Dr. Coxxy View Post
PacketSize*NumberOfPacketsPerSecondPerClient*Numbe rOfClients

ansonsten einfach mal implementieren und ausprobieren, wozu gibts netzwerkmonitoringtools?
Ok ich werde es ausprobieren :)

Quote:
Originally Posted by »FlutterShy™ View Post
ein movepacket dürfte doch nur ein paar kilobyte groß sein ? der server sollte di positionen aber abgleichen.

Ich würde die ja so senden :
coordx|coordy|coordz|nochn paar andere sachen
Ja also ich werde eine diesen Aufbau nehmen:
Header|posx|posy
mehr brauch es ja nicht sein oder ? ;) ist ja nur 2D.

Der Server macht die überprüfung usw.

oder hat einer einen besseren Vorschlag ? Bin offen für alle Ideen

MFG Conrew
07/24/2013 23:19 dowhile#13
Quote:
Originally Posted by »FlutterShy™ View Post
ja paar kilobytes . ich hatte mal ein kleines server client script da wurde das packet so abgesendet :
Code:
Function|Parameter1|Parameter2|Parameter3|Parameter4|OptionalerParameter|Ip des absenders|ip des servers|ip von dem der die antwort empfängt|timestamp
das dann noch binär und crypted und schon hat man 3 kb
Was meinst du mit "binär"?

Was spricht dagegen, das Paket so aufzubauen?

Befehl:2 Bytes
X: 8 Bytes
Y: 8 Bytes
Z: 8 Bytes

Befehl entspricht der Funktion, X, Y und Z sind die Parameter.
Wieso muss die IP des Servers übertragen werden?
Wieso die IP des Clients?
Wieso darf der Client bestimmen, welche andere Clients das Paket erhalten; wieso macht das nicht der Server (oder was ist mit "ip von dem der die antwort empfängt" gemeint)?
Wieso ist der Timestamp hier relevant? Aber wenn er das ist, sind das nur vier Bytes mehr.

Das sind dann insgesamt 26 bzw. 30 Bytes Daten (exklusive Verschlüsselung).

(Mir ist schon klar, dass deine Variante mehr in Richtung RMI geht; aber ob das bei einem Spiel wirklich angebracht ist, halte ich für fragwürdig).
07/25/2013 02:21 .SkyneT.#14
Quote:
Originally Posted by dowhile View Post
Wieso muss die IP des Servers übertragen werden?
Wieso die IP des Clients?
Das ist einfach nur extrem überflüssig, da die IP des
Empfängers/Senders ohnehin im Header steht.

Wenn ich mal grob schätze dürfte ein TCP/IPv4 Packet
40byte + Daten haben.
07/25/2013 02:23 YatoDev#15
Quote:
Originally Posted by dowhile View Post
(Mir ist schon klar, dass deine Variante mehr in Richtung RMI geht; aber ob das bei einem Spiel wirklich angebracht ist, halte ich für fragwürdig).
das war bei einem client server projekt bei mir so afgebaut