10 Stimmen

Spiel-Engine-Design: Multiplayer und Listen-Server

Mein Spiel-Engine besteht derzeit aus einem funktionierenden Singleplayer-Teil. Ich fange jetzt an, über die Umsetzung des Mehrspieler-Teils nachzudenken.

Ich habe herausgefunden, dass viele Spiele tatsächlich keinen echten Singleplayer-Modus haben, sondern wenn man alleine spielt, fungiert man eigentlich auch als lokaler Server, und fast alles läuft so, als wäre man im Mehrspieler-Modus (außer dass die Datenpakete über einen alternativen Weg zur besseren Leistung übermittelt werden können).

Mein Engine müsste einer umfangreichen Neustrukturierung unterzogen werden, um sich an dieses Modell anzupassen. Es gäbe drei mögliche Modi: Dedizierter Client, Dedizierter Server und Client-Server (Listenmodus)

  • Wie häufig wird das Listen-Server-Modell in der Gaming-Industrie verwendet?
  • Was sind die (Nach-)Vorteile davon?
  • Welche anderen Optionen habe ich?

30voto

shmeeps Punkte 7365

Ich werde versuchen, diese Frage so gut wie möglich zu beantworten:

Wie oft wird das Listen-Server-Modell in der Gaming-Branche verwendet?

Bei den meisten Online-Spielen findet man, dass die Mehrheit der Spiele eine Client-Server-Architektur verwendet, allerdings nicht immer auf die erwartete Weise. Nehmen wir zum Beispiel jedes Source-Spiel. Die meisten verwenden einen Standard-Client-Server mit einer Master-Server-Architektur (um verfügbare Spiele aufzulisten), bei dem eine Person einen dedizierten Server hostet und jeder mit einem Client daran teilnehmen kann.

Es gibt jedoch einige Spiele und Dienste, wie zum Beispiel Left 4 Dead, League of Legends und einige XBox Live-Spiele, die einen leicht anderen Ansatz verfolgen. Alle diese verwenden eine Client-Server-Architektur mit einem steuernden Server. Die Hauptidee dabei ist, dass jemand einen dedizierten Server erstellt, der kein Spiel "ausführt". Der steuernde Server erstellt eine Art "Lobby", und wenn das Spiel gestartet wird, fügt der steuernde Server sie in eine Warteschlange ein und wählt dann, wenn die Lobby an der Reihe ist, einen passenden dedizierten Server aus (in Bezug auf Standort/Geschwindigkeit, Verfügbarkeit, zahlreiche Faktoren) und weist die Spieler diesem Server zu. Erst dann läuft das Spiel tatsächlich auf dem Server. Es ist dasselbe Prinzip, aber etwas vereinfacht, da der Client keinen Server "auswählen" muss, sondern nur einem Spiel beitreten und den steuernden Server die Arbeit machen lassen muss.

Natürlich ist das größte Client-Server-Modell das MMO-Modell, bei dem ein oder mehrere Server eine persistente Welt betreiben, die fast alle Daten und Logik verarbeitet. Einige der bekanntesten Spiele, die dieses Modell nutzen, sind World of Warcraft, Everquest, alles in dieser Art.

Wo passt ein Listen-Server hierhin? Um ehrlich zu sein, nicht wirklich gut, jedoch werden immer noch viele Spiele damit betrieben. Zum Beispiel erlauben die meisten Source-Spiele das Erstellen von Listen-Servern, und viele XBox Live-Spiele ebenfalls (es ist schon eine Weile her, aber ich glaube, dass Counter Strike das gleiche getan hat, sowie Quake 4 und viele andere). Im Allgemeinen scheinen sie jedoch aufgrund der Vorteile des Client-Server-Modells verpönt zu sein, was uns zu unserem nächsten Punkt bringt.

Was sind die (Dis)Vorteile davon?

Erstens und vor allem: Leistung. In einem Client-Server-Modell behandelt der Client lokale Änderungen (wie Eingaben, Grafiken, Sounds usw.) in jedem Zyklus des Spiels. Am Ende des Zyklus wird relevante Daten (zum Beispiel, hat sich der Spieler bewegt? Wenn ja, wohin? Wohin schaut er jetzt? Geschwindigkeit? Hat er geschossen? Wenn ja, Informationen über die Kugel usw.) verpackt und an den Server zur Verarbeitung gesendet. Der Server wird diese Daten überprüfen und feststellen, ob alles gültig ist, z. B. ob sich der Spieler auf eine Weise bewegt, die auf Hacking hinweist (dazu später mehr), ob der Zug gültig ist (ist etwas im Weg?), ob die Kugel von Spieler 1 Spieler 2 getroffen hat usw. Anschließend verpackt der Server diese Daten und sendet sie an die Clients, die dann alle notwendigen Aktualisierungen durchführen, wie beispielsweise die Anpassung der Lebenspunkte, wenn der Spieler getroffen wurde, das Kicken des Spieler, wenn festgestellt wird, dass er hackt, usw.

Ein Listen-Server muss jedoch all dies gleichzeitig bewältigen. Da ich davon ausgehe, dass Sie mit dem Programmieren vertraut sind, werden Sie wahrscheinlich wissen, wie viel Leistung ein Spiel von einem Computer abrufen kann, insbesondere von einem schlecht konzipierten. Wenn Sie noch die Netzwerkverarbeitung, Sicherheitsverarbeitung und mehr hinzufügen, sowie das Spiel des Clients, können Sie sehen, wo die Leistung ernsthaft beeinträchtigt werden könnte, zumindest was Standardverarbeitung betrifft. Darüber hinaus laufen die meisten Server in schnellen Netzwerken und sind für den Netzwerkverkehr ausgelegt. Wenn das Netzwerk eines Listen-Servers langsam ist, leidet das gesamte Spiel.

Zweitens Sicherheit, wie bereits erwähnt, ist eine der Hauptaufgaben eines Servers festzustellen, ob ein Spieler das Spiel ausnutzt. Sie haben vielleicht Programme wie Punkbuster, VAC usw. gesehen. Es gibt eine sehr komplizierte Reihe von Regeln, die diese Programme ausführen, zum Beispiel die Unterscheidung zwischen einem Hacker und einem sehr guten Spieler. Es wäre sehr schlecht für Ihr Spiel, wenn Sie keine Hacker erkennen könnten, aber noch schlimmer, wenn Sie Maßnahmen gegen einen fälschlicherweise Beschuldigten ergreifen würden.

Ein Listen-Server wird in der Regel nicht in der Lage sein, das Spiel des Clients, die Serververarbeitung und die Hack-Erkennung zu bewältigen, und in den meisten Fällen sind Detektoren wie Punkbuster sehr schwer zu installieren, wenn nicht unmöglich, um auf einem Listen-Server ausgeführt zu werden, weil es schwer für ihn ist, ohne die notwendige Rechenleistung korrekt zu funktionieren, da in der Regel die Spiellogik vor der Sicherheit priorisiert wird, und wenn dem Detektor nicht erlaubt wird, für einen Frame zu verarbeiten, kann er die erforderlichen Daten verlieren, um jemanden zu überführen.

Zu guter Letzt, Gameplay. Der größte Vorteil von Servern ist, dass sie persistent sind, was bedeutet, dass der Server auch dann weiter läuft, wenn alle Spieler das Spiel verlassen. Das ist nützlich, wenn Sie einen beliebten Server haben, der nachts nicht viel Aktivität verzeichnet, sodass Personen beitreten können, wenn sie bereit sind zu spielen, ohne darauf warten zu müssen, dass er wieder online gebracht wird.

Bei einem Listen-Server ist der Hauptnachteil, dass sobald der Client, der den Listen-Server hostet, das Spiel verlässt, das Spiel entweder an einen anderen Spieler übergeben werden muss (was eine Pause im Spiel bedeuten kann, die unter Umständen Minuten dauern kann) oder vollständig beendet werden muss. Dies ist auf einem großen Server nicht bevorzugt, da der Host entweder online bleiben muss (was einen Slot im Server und seine Rechenleistung verschwendet, was auch das Spiel verlangsamen könnte) oder das Spiel für alle beenden muss.

Trotz dieser Probleme haben Listen-Server jedoch ein paar Vorteile.

Einfach einzurichten: Die meisten Listen-Server sind nicht mehr als ein Klick auf "Neues Spiel" und lassen Menschen beitreten. Dies ist einfach für Leute, die nur mit ihren Freunden spielen möchten und keine leeren dedizierten Server suchen möchten oder mit anderen spielen möchten.

Gut zum Testen: Wenn jemand einen dedizierten Server besitzt und die Konfiguration ändern möchte, ist es in der Regel eine bessere Idee, die Konfiguration zuerst zu testen. Der Benutzer müsste entweder eine Sicherungskopie des dedizierten Servers erstellen und blind Änderungen vornehmen, wobei die einzige Option wäre, zurückzugehen, wenn etwas schiefgeht, einen neuen dedizierten Server erstellen, um sie zu testen, oder einfach einen einfachen Listen-Server erstellen, um sie zu testen. Und mit Punkt 1 sind diese im Allgemeinen einfacher zu starten und zu konfigurieren. Das ist besonders wahr, da die meisten dedizierten Server nicht im unmittelbaren Zugriff des Administrators liegen (die meisten dedizierten Server werden von einem entfernten Standort gemietet). Es dauert viel länger, Konfigurationsänderungen sowie Befehle für Neustarts usw. an einen entfernten Standort zu senden als an eine Maschine, auf der der Administrator sich gerade befindet.

Weniger Ressourcen: In den meisten dedizierten Servern kann sich ein Benutzer mit derselben IP nicht mit dem dedizierten Server verbinden (das bedeutet, dass der Client entweder den Server hosten oder spielen muss, beides gleichzeitig ist nicht möglich). Wenn der Client auf seinem eigenen Server spielen möchte, benötigt er normalerweise eine zweite Maschine, um den Server zu hosten, oder muss einen dedizierten Server kaufen oder mieten, damit er tatsächlich darauf spielen kann. Ein Listen-Server erfordert nur eine Maschine, die das einzige sein könnte, was der Client verwenden kann.

In beiden Fällen haben beide Vorteile und Nachteile, und Sie müssen sie mit dem abwägen, was Sie bereit sind zu entwerfen und umzusetzen. Aus meiner Erfahrung heraus glaube ich, dass ein Listen-Server genutzt würde, wenn auch nur von einigen Benutzern, die mit Freunden herumspielen möchten oder Einstellungen testen möchten.

Zuletzt:

Welche anderen Optionen habe ich?

Dies ist eine knifflige Branche. Tatsächlich kann jede Art von Netzwerkarchitektur auf Videospiele angewendet werden. Vom, was ich gesehen habe, aber wie die meisten Internetkommunikationen, reduzieren sich die meisten auf irgendeine Form des Client-Server-Modells.

Lassen Sie mich wissen, wenn ich Ihre Frage nicht beantwortet habe, oder wenn Sie etwas genauer erklärt haben möchten, und ich sehe, was ich tun kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X