Announcement

Collapse
No announcement yet.

Performante Netzwerkprogrammierung für FPS

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Performante Netzwerkprogrammierung für FPS

    Hallo.

    Ich bin grad dabei ein Spiel (Netzwerkfähig) zu programmieren.
    Zuerst wollt ich das schwierigste machen. Also das Netzwerkmodul.

    Meine Allgemeine Frage dreht sich darum, wie man das Umsetzen kann.
    Also, wann schickt der Client Daten und sowas.
    Ich habe bereits zwei Möglichkeiten entdeckt, die aber nicht zufrieden stellend waren:

    1.
    Client-Server mit UDP für Transformationsänderungen:
    Ich hab per UDP eine "Verbindung" zum Server aufgebaut (port, adress-speicherung).
    Es werden in kleinen Abständen die Daten von Transformationsänderungen zum Server geschickt, der diese verteillt. Der Abstand ist so geregelt, das andere Spieler dies nicht als Stocken wahrnehmen.

    Das Problem hierbei ist, das es zwar bei 5 spielern noch keine Probleme gibt, aber sobalt 10-15 Spieler im Spiel sind, steigt die Synctime (Die zeitspanne von Absender-Server-Empfänger). Ich vermute das es daran liegt das der Server alles verarbeiten muss.
    Diese Methode ist somit weniger für das Spiel geeignet.

    2.
    Client-Server mit UDP für Statusmeldungen.
    Wie bei 1. die Verbindung. Wenn der Client eine Taste gedrückt hält wird nicht ständig die Pos/Rot geschickt, sondern nur das eine Taste gedrückt wurde.
    Der Server verteilt wieder.
    Je nach dem welche Taste gedrückt wurde berechnet jeder Client seinen bewegenden mitspieler selbst. Bei W zb läuft der Client bei anderen Clients solange in die eine Richtung bis das KeyUp Event vom Client übern Server kommt.
    Das sparrt MASSEN Traffic.
    Das Problem hierbei: Wie kann man die Rotationsdaten der Maus übergeben? Da kann man nicht die Daten erst übergeben, wenn sich die Maus dreht oder nicht dreht, da man nicht weis wie stark sie sich dreht.
    Und daten nur senden, wenn sich die Maus um 10° gedreht hat, würde bei anderen clients zu seltsam aussehen.
    Diese Methode kommt wegen der fehlenden Lösung des Mausproblems somit auch nicht in Frage.



    Ich hab mich informiert. Es gibt zb noch diese Client zu Client methode.
    Das heißt, das jeder Client seine Transdaten den anderen Clients direkt schickt, was ja mit udp möglich ist. somit wird der Flaschenhals beim Server umgangen.
    Diese Methode hab ich aber noch nicht implementiert.


    Wie machen es zum beispiel die anderen Games?
    CS zum beispiel..
    Der Ping ist immer niedrig (im Lan) obwohl 32 Personen gleichzeitig spielen.
    Wie sieht das Netzwerksystem da aus? Was macht alles der Server, was der Client?

    Ich hoffe ihr könnt mir helfen.
    Falls ihr eine gute Literatur über allgemeine Netzwerktheorie bei Spielen kennt, würde ich mich freuen, wenn ihr diese mit nennt.

    lg Michael
    Zuletzt editiert von capgeti; 09.08.2010, 12:14.
Working...
X