Du bist nicht angemeldet.

Werbeanzeige

Sneyke

Frischling

  • »Sneyke« ist der Autor dieses Themas

Beiträge: 34

Beruf: Softwareentwickler

  • Private Nachricht senden

1

08.07.2016, 12:17

Game Server - Was genau wird übertragen?

Hi Leute,

bisher war ich stiller Mitleser. Aber ich dachte mir dieses Thema könnte noch ganz gut hier reinpassen. Das Ziel dieses Threads ist nicht zu erörtern was ein Game Server ist und was er macht, sondern was genau dieser überträgt bzw. welche Informationen benötigt werden um einen flüssigen Spielablauf hin zu bekommen. Bestimmt gibt es da mehrere Möglichkeiten. Aber was sind denn da die geläufigsten? Da ich mich momentan selbst mit diesem Thema beschäftige aber keine brauchbaren Infos aus dem Internet bekomme möchte ich hier mal einfach meine Gedanken in den Raum werfen.

Sind es eher sinngemäße Kommandos wie "[Objekt 1 läuft in Richtung alpha los] -> [Objekt 1 bleibt auf (x,y,z) stehen]" oder sind das eher nur reine wegpunkte wie "[Objekt 1 steht auf (10, 11 , 11)], [Objekt 1 steht auf (10, 11, 16)]"? Hat da jemand Erfahrung von euch?

Gibt es da große Unterschiede zwischen sehr Zeitkritischen Spielen wie ein FPS und einem Halbrunden-basiertem RPG? Ist es ausschlaggebend ober ob Peer-tp-Peer übertragen wird oder eine Client-Server-Architektur verwendet wird?

Ich freue mich auf eure Antworten.

Grüße

Sneyke

David Scherfgen

Administrator

Beiträge: 10 198

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

08.07.2016, 12:56

Willkommen im Forum!

Das ist tatsächlich ein sehr komplexes Thema. Ich gebe dir einfach mal einen Link zu einer Seite, wo du sehr viele Artikel zu diesen Themen findest:

http://gafferongames.com/networking-for-game-programmers/
und http://gafferongames.com/game-physics/networked-physics/

David Scherfgen

Administrator

Beiträge: 10 198

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

08.07.2016, 13:17

Nachtrag: Insbesondere dieser Artikel sollte interessant sein, da er einen Überblick gibt.

Jar

Treue Seele

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

4

08.07.2016, 13:21

Witzigerweise beschäftige ich mich gerade mit genau dem gleichem Thema:

Hier noch ein sehr wichtiger Link:
http://gafferongames.com/networking-for-…ame-networking/
http://gamedevelopment.tutsplus.com/arti…n--gamedev-3849

Wenn hier eine Antwort gefunden wird würde ich mich sehr freuen.

Mein Ansatz ist bisher eine Server Client Architektur, wobei der Server und der Client beide Bewegungsbeschreibungen anstoßen und diese von Zeit zu Zeit synchronisieren.
Die Berechnung von anderen Objekten die nicht dein Spieler sind finden dabei nur Serverseitig statt. Und immer wenn dein Spieler in Kontakt mit genau solchen Objekten kommt (Sichtfeld oder Collision) sollten Informationen übertragen werden. Denn dein Sichtfeld ist begrenzt und dementsprechend brauchst du keine Informationen über Objekte die am anderen Ende der Welt sind. Genauso brauchst du keine Informationen senden von Objekten die Ihren Zustand nicht geändert haben, oder ändern können.

Gibt es da große Unterschiede zwischen sehr Zeitkritischen Spielen wie ein FPS und einem Halbrunden-basiertem RPG? Ist es ausschlaggebend ober ob Peer-tp-Peer übertragen wird oder eine Client-Server-Architektur verwendet wird?

Ja, aber das ist besser in den gelinkten Artikeln beschrieben. Man kann auch alles über den FPS Ansatz regeln, könnte aber mehr Aufwand bedeuten.

Meine Ansätze sind alle noch recht theoretisch, beschäftige mich erst seid ein paar Tagen mit der Umsetzung einer Server Client Lösung für mein Game.

Edit: David hat einen der Links bereits nachgetragen ^^

Sneyke

Frischling

  • »Sneyke« ist der Autor dieses Themas

Beiträge: 34

Beruf: Softwareentwickler

  • Private Nachricht senden

5

08.07.2016, 13:30

Danke für die Links. Den Nachtrag hab ich mir grad durchgelesen. Sehr interessant. Da versteht man auch gleich wieso Quake und co früher immer so laggy waren :D

Nox

Supermoderator

Beiträge: 5 274

Beruf: Student

  • Private Nachricht senden

6

08.07.2016, 14:03

Ansonsten gibt es in diesem Forum auch schon ein paar Diskussionen zu dem Thema (P2P vs. Server Client und Ereignisse- vs. Zuständeübertragung). Netzwerkprogrammierung ist an sich ein sehr spannendes, aber auch sehr zeitinvensives Thema. Wenn euer Interesse eher in Richtung funktionierende Implementierung geht, dann würde ich eher zur Verwendung einer etablierten Bibliothek raten.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Sneyke

Frischling

  • »Sneyke« ist der Autor dieses Themas

Beiträge: 34

Beruf: Softwareentwickler

  • Private Nachricht senden

7

08.07.2016, 14:25

Bei mir geht es um eine eigene Implementierung. Momentan bringe ich einem Freund ein Java bei. Hier hab ich gedacht mach ich doch nach und nach ein Spiel mit ihm (ich hab schon das ein oder andere "halb-fertig-spiel" entwickelt). Es wird nix großes, nur ein kleines 2d X-spieler Hack ´n Slay fürs eigene Netz. Aber ich dachte wenn ich schon dabei bin, dann informiere ich mich schon richtig. Die Links haben sehr geholfen.


@ Nox

In deiner Signatur ist ein MMO-Ready Server verlinkt. Im Gegensatz zur Empfehlung auf GafferonGames arbeitet diese mit TCP, wenn ich es genau verstanden habe? Heist MMO-Ready in diesem Fall auch wirklich "richtig" MMO-Ready? Ich will deine Arbeit auf keinen Fall schlecht machen. Mich interessiert nur ob TCP eventuell doch dafür geeignet ist. Das wäre eine enorme Erleichterung.

Jar

Treue Seele

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

8

08.07.2016, 14:47

Wo ich gerade Java lese, ich benutzte KryoNet und diese ist relativ schlank und bietet TCP und UDP support: https://github.com/EsotericSoftware/kryonet.
Zusätzlich gibt es dazu ein sehr gutes Einsteiger Tutorial: https://www.youtube.com/watch?v=nS8WfLS1…bekLlncne3BiESN

Ich glaube in einem der Artikel auf der verlinkten Seite wird auch zu TCP und MMOs bzw WoW eingegangen, also warum es dort funktionieren kann. Aber dort auch wieder das Stichwort: Client Side Prediction

Nox

Supermoderator

Beiträge: 5 274

Beruf: Student

  • Private Nachricht senden

9

08.07.2016, 21:18

@Sneyke es kommt darauf an was dein Netzwerkmodell voraussetzt. Es gibt z.b. das Quake(?) Konzept in dem immer die Veränderung zum letzten von Client bestätigten Zustand verschickt wird. Sprich das Konzept ist nicht darauf angewiesen, dass jedes Paket ankommt. Nun sind aber viele Konzepte implizit darauf angewiesen, dass die Pakete ankommen und oft wird auch angenommen, dass sie in der richtigen Reihenfolge ankommen (z.b. Gegner 1 stirbt, Gegner 1 schießt ist was ganz anderes als Gegner 1 schießt, Gegner 1 stirbt).
Was also viele machen ist zunächst auf UDP bauen weil es ja "schneller" ist. Dann stellen sie fest, dass sie "in order" und "reliable" benötigen und enden darin, dass sie übers UDP noch Logik stülpen um TCP Verhalten zu bekommen. Wer nun glaubt es selbst besser zu machen als der seit Jahren entwickelte TCP stack, kann das natürlich gerne tun. Zumindest haben alle UDP basierten Libs, die ich mal vor Jahren getestet habe, TCP nicht das Wasser reichen können, wenn es um seine Kernkompetenz ging (reliable & in order).
Mein Fazit: Unter idealen Voraussetzungen sind UDP und TCP gleich schnell. Sobald packet loses ins Spiel kommen und man damit leben kann, ist UDP eindeutig zu bevorzugen. Wenn man auf Reihenfolge und Komplettheit angewiesen ist, ist TCP im Vorteil. Und mal ganz ehrlich: beide basieren auf den gleichen OSI-Layern. Warum sollte es beides noch geben, wenn eines von beidem immer klar im Vorteil wäre?
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Jar

Treue Seele

Beiträge: 197

Wohnort: Lübeck

Beruf: Softwareentwickler

  • Private Nachricht senden

10

08.07.2016, 21:42

Mein Fazit: Unter idealen Voraussetzungen sind UDP und TCP gleich schnell. Sobald packet loses ins Spiel kommen und man damit leben kann, ist UDP eindeutig zu bevorzugen. Wenn man auf Reihenfolge und Komplettheit angewiesen ist, ist TCP im Vorteil. Und mal ganz ehrlich: beide basieren auf den gleichen OSI-Layern. Warum sollte es beides noch geben, wenn eines von beidem immer klar im Vorteil wäre?

Dazu würde ich mir http://gafferongames.com/networking-for-…ers/udp-vs-tcp/ mal durchlesen. Man sollte nie nur eines von beiden benutzten, eine Harmonie aus beiden ist der Weg zu Erfolg. Und wenn du das von mir angesprochene Verfahren (Client Side Prediction) anwendest kannst du auch mit UDP eine FPS programmieren.

Zitat

The temptation then is to use UDP for player input and state, and TCP for the reliable ordered data.

Werbeanzeige