Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

1

02.08.2006, 11:17

Welche Netzwerktopologie?

Hi!

Ich bin gerade am Überlegen, ob ich mir eine kleine Netzwerkengine zusammenprogge... Grundlagen über winSocks hab ich mir angeeignet. Nun wollte ich fragen, bevor ich richtig losleg, welche Netzwerktopologien in komerziellen Spielen verwendet werden.
Also ich hätte da an zwei Möglichkeiten gedacht...:
1. Einen Server und jeder der spielen will, braucht einen Client. Gesendet wird nach außenhin von Client zu Client. Im Hintergrund aber von client zu server und von Server dann zum Zielclient. Vorteil, außer der Server hat jeder nur einen Socket offen, und kann durchaus alle erreichen.
Nachteil: Ich denk mal, dass die Performance des Servers stark leidet, er wird ZIEMLICH viel Traffic haben, und er braucht zusätzlich noch (wenn er selbst spielen will) einen client. dh 2 Sockets + enormer Traffic!
2. Jeder ist mit jedem Verbunden. Vorteil: Kein übergroßer Traffic bei einem Server, sondern verteilt
Nachteil: jeder spieler braucht einen Server UND einen ClientSocket...

Welches ist die performantere Lösung? Oder gibt es noch eine bessere?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

2

02.08.2006, 11:58

Ich denke mal, meist wird die Stern-Topologie benutzt (ein Server, viele Clients) weil man sonst Probleme hat, den kompletten Status des Spiels (oder was auch immer) konsistent auf allen Clients zu haben.

Der Trick ist eben, die Nachrichten so knapp zu halten, dass der Traffic nicht überhand nimmt. (z.B. Karte liegt auf dem Client, Spielerpositionen werden zentral vom Server verwaltet und bei Änderung an alle Clients verteilt)

Die direkte Kommunikation zwischen Clients ist -- ausser bei Chat-Funktionen -- eher ungewöhnlich.

Das Problem "Spieler auf dem Server" kann man auch lösen, indem man einen kombinierten Client und Server hat, also der Client selbst auch Server sein kann. Extra Server sind immer dann interessant, wenn man von "Standalone" spricht, und einen Server im Netz stehen hat, der nichts anderes als Server ist.

MfG
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

3

02.08.2006, 12:21

hmmmm...
Also ich der Server sozusagen autark. Es werden ihm Infos von Client X zugeschickt, und er leitet sie direkt an alle registrierten Clients weiter (außer natürlcih an X). k... Werd das so umsetzten.
Protokoll verwend ich UDP... Da muss man ja, selbst die Daten in Packete aufsplitten, oder? Durchnummerieren auch?

Eine weitere Frage, welche sich stellt. Bezüglich Synchronisation... welche möglichkeiten gibts da? Bis jetzt ist mir nur eingefallen, dass man immer die vergangene Zeit mitschickt (m_fTime), an der die Änderung passiert ist. Was ist jetzt aber, wenn ein Client eine Info von zB 1.0s bekommt, selbst aber schon bei 1.8s ist... wird diese Info verworfen?
Oder soll die Synchronisation vom Server gemacht werden? Wenn ja wie?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Werbeanzeige