Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Gameserver Entwicklung





Frage

Hi *.* Ich progge z.Zt. an einem Game, welches ich ganz gerne Multiplayerfähig machen will. Da ich aber noch nie so richtig Game-Server geproggt habe suche ich also mal ne I-Net Seite die einen vermittelt wie der Datenfluss zwischen Game und Server auszusehen hat. Wie gesagt, mir geht es nicht um die Programmierung eines Servers, connecten usw. geht ja schon, sondern nur um die Struktur des Daten versendens. Der Server soll halt sicher sein, dass die Clients seine Daten empfangen und verarbeitet haben, ebenso sollen die Clients sicher sein, dass der Server die Daten hat. Meine Frage ist besonders was passiert wenn ich dem Server/Client ein Datenpacket sende, er dieses verarbeitet, und während des Verarbeitens noch eines sende. Geht das dann verloren, weil er noch am verarbeiten des ersten Packetes zugange ist? CU Kai

Antwort 1 von asok

Hi.

Du hast leider nicht geschrieben, was für eine Art Spiel das ist, auf welcher Plattform das läuft und in welcher Sprache du das implementierst. Aus deinen Fragen schliesse ich mal auf ein Strategiespiel. Ich fang' mal so an:

Du brauchst zwingend

- ein präzises Timing in deiner Gamelogik.
Unverzichtbar für die Timeouts, aber
das wirst du eh haben, da du sicher mit maximaler Frequenz renderst, aber vermutlich nicht mit maximaler Frequenz animierst...

- Multithreading

Der Netzwerkteil muss parallel zu deiner Spiellogik laufen. Du weisst ja nicht, wann die Nachrichten reinkommen, da kommst du also nicht dran vorbei.

- Buffering der eingehenden Nachrichten
Eben damit dir keine Nachrichten verloren gehen. Mit an Sicherheit grenzender Wahrscheinlichkeit wirst du es nämlich nicht schaffen, eine Message anzunehmen _und_ zu verarbeiten bevor die nächste ankommt.

Die Logik selbst ist relativ simpel: Die Clients schicken jeweils ihre Daten an den Server; wenn alle angekommen sind, schickt dieser alle Daten an alle Clients zurück, die "Spielrunde" kann laufen. Damit das funktioniert solltest du Netzwerkzyklen einführen, und den versendeten Nachrichten diese Information mitgeben.

Danach liegen die Probleme im Detail:
Reihenfolge der Nachrichten, Ausfall von Nachrichten, Ausfall eines Clients, Ausfall des Servers, De-sync auf Logikebene, De-sync auf Netzwerkebene, unterschiedlich schnelle Rechner usw...

Die eigentliche Arbeit liegt also noch vor dir. Der Netzwerkteil ist schwer zu testen und sehr schwer zu debuggen. Das dauert, bis das letztlich stabil läuft, also plan nicht zu wenig Zeit ein. Bei manchen Spielen klappt das nie, aber in dem Fall wärst du in prominenter Gesellschaft (Siedler 3). ;-)

Tja, dann viel Spass. Schick 'ne Mail, falls du Fragen hast.

Noch ein Rat. Falls du mit VC++ programmierst - davon gehe ich aus - lass dir gesagt sein: DirectPlay ist dein Freund! (Zumindest seit DX7.)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: