Game Engine Design: Multiplayer- und Listen-Server [geschlossen]

10

Meine Spiel-Engine besteht momentan aus einem funktionierenden Einzelspieler-Teil. Ich fange jetzt an darüber nachzudenken, wie man den Multiplayer-Teil macht.

Ich habe herausgefunden, dass viele Spiele tatsächlich keinen echten Einzelspielermodus haben, aber wenn Sie alleine spielen, hosten Sie tatsächlich auch einen lokalen Server, und fast alles läuft so, als ob Sie im Mehrspielermodus wären (außer dass die Datenpakete weitergegeben werden können über eine alternative Route für eine bessere Leistung)

Mein Motor müsste grundlegend überarbeitet werden, um sich an dieses Modell anzupassen. Es gibt drei mögliche Modi: Dedizierter Client, Dedizierter Server und Client-Server (Listen-Modus)

  • Wie oft wird das Listen-Server-Modell in der Spielebranche verwendet?
  • Was sind die (Nachteile) davon?
  • Welche anderen Optionen habe ich?
Vaillancourt
quelle
4
Die erste Frage ist ziemlich irrelevant. Warum sollte es wichtig sein, wie die Branche das macht? Sie machen nicht alles am besten.
Die kommunistische Ente

Antworten:

11

Ich werde sehen, ob ich das so gut wie möglich beantworten kann:

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

Wenn es um die meisten Online-Spiele geht, werden Sie feststellen, dass eine große Mehrheit der Spiele eine Client-Server-Architektur verwendet, wenn auch nicht immer so, wie Sie denken. Nehmen Sie zum Beispiel ein beliebiges Quellenspiel. Die meisten verwenden einen Standard-Client-Server mit einer Master-Server-Architektur (um die verfügbaren Spiele aufzulisten), wobei eine Person einen dedizierten Server hostet und jeder mit einem Client diesem beitreten kann.

Sie haben jedoch einige Spiele und Dienste, z. B. Left 4 Dead, League of Legends und einige XBox Live-Spiele, die einen etwas anderen Ansatz verfolgen. Diese verwenden alle eine Client-Server-Architektur mit einem steuernden Server. Die Hauptidee hier ist, dass jemand einen dedizierten Server erstellt, auf dem kein Spiel "ausgeführt" wird. Der steuernde Server erstellt eine Art "Lobby", und wenn das Spiel gestartet wird, fügt der steuernde Server sie einer Warteschlange hinzu, und wenn diese Lobby an der Reihe ist, wählt er einen passenden dedizierten Server aus (in Bezug auf Standort /). Geschwindigkeit, Verfügbarkeit, zahlreiche Faktoren) und weisen Sie die Spieler diesem Server zu. Nur dann wird der Server das Spiel tatsächlich "ausführen". Es ist die gleiche Idee, aber ein wenig vereinfacht, da der Client keinen Server "auswählen" muss.

Das größte Client-Server-Modell ist natürlich das MMO-Modell, bei dem auf einem oder mehreren Servern eine beständige Welt ausgeführt wird, die fast alle Daten und Logik verarbeitet. Einige der bekannteren Spiele, die dieses Modell verwenden, sind World of Warcraft, Everquest, so etwas.

Wo passt also ein Listen-Server hierher? Um ehrlich zu sein, nicht wirklich gut, aber Sie werden immer noch viele Spiele finden, die es verwenden. Zum Beispiel erlauben die meisten Source-Spiele das Erstellen von Listen-Servern, und viele XBox Live-Spiele tun dies (es ist eine Weile her, aber ich glaube, Counter Strike hat es getan, ebenso wie 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 (Nachteile) davon?

In erster Linie: Leistung. In einem Client-Server-Modell verarbeitet der Client lokale Änderungen (wie Eingaben, Grafiken, Sounds usw.) in jedem Zyklus des Spiels. Am Ende des Zyklus werden relevante Daten zusammengefasst (z. B. hat sich der Spieler bewegt? Wenn ja, wohin? Wohin schaut er jetzt? Geschwindigkeit? Haben sie geschossen? Wenn ja, Informationen zur Kugel. Usw.) und senden Sie diese zur Verarbeitung an den Server. Der Server nimmt diese Daten und stellt fest, ob alles gültig ist, z. B. ob sich der Benutzer auf eine Weise bewegt, die auf Hacking hinweist (dazu später mehr), ob die Bewegung gültig ist (irgendetwas im Weg?), Hat die Kugel vom Spieler 1 Treffer Spieler 2? Und mehr. Dann packt der Server dies zusammen und sendet es an die Clients, die dann alles Notwendige aktualisieren, z. B. die Gesundheit anpassen, wenn der Spieler erschossen wurde, den Spieler treten, wenn festgestellt wird, dass er hackt usw.

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

Die zweite Sicherheit ist , wie bereits erwähnt, eines der wichtigsten Dinge, die ein Server tun wird, um festzustellen, ob ein Spieler das Spiel ausnutzt. Möglicherweise haben Sie diese als Punkbuster, VAC usw. angesehen. Es gibt eine sehr komplizierte Reihe von Regeln, mit denen diese Programme ausgeführt werden, z. B. um den Unterschied zwischen einem Hacker und einem sehr guten Spieler zu bestimmen. Es wäre sehr schlecht für Ihr Spiel, wenn Sie keine Hacker fangen könnten, aber noch schlimmer, wenn Sie eine Aktion gegen einen fälschlicherweise Beschuldigten ausführen würden.

Ein Listen-Server ist im Allgemeinen nicht in der Lage, das Spiel des Clients, die Server-Verarbeitung und die Hack-Erkennung zu handhaben, und in den meisten Fällen sind Detektoren wie Punkbuster sehr schwer, wenn nicht unmöglich, auf einem Listen-Server ausgeführt zu werden, da dies der Fall ist Es ist schwierig, ohne die erforderliche Rechenleistung korrekt zu funktionieren, da die Spiellogik im Allgemeinen Vorrang vor der Sicherheit hat. Wenn der Detektor nicht für einen Frame verarbeiten darf, kann er die Daten verlieren, die zur Verurteilung einer Person erforderlich sind.

Zum Schluss das Gameplay . Das Größte an Servern ist, dass sie dauerhaft sind, was bedeutet, dass der Server auch dann weiter ausgeführt wird, wenn alle Benutzer den Server verlassen. Dies ist nützlich, wenn Sie einen beliebten Server haben, auf dem nachts nicht viel los ist. Die Benutzer können trotzdem beitreten, wenn sie spielbereit sind, und müssen nicht warten, bis er wieder online geschaltet wird.

Bei einem Listen-Server besteht der Hauptnachteil darin, dass das Spiel, sobald der Client, auf dem sich der Listen-Server befindet, das Spiel verlässt, entweder auf einen anderen Spieler übertragen werden muss (wodurch in einigen Fällen eine Pause im Spiel entsteht, die in einigen Fällen Minuten dauern kann) oder vollständig beendet werden muss . Dies ist auf einem großen Server nicht vorzuziehen, da der Host entweder online bleiben muss (Verschwendung eines Steckplatzes im Server und seiner Computerleistung, was auch das Spiel verlangsamen könnte) oder das Spiel für alle beenden muss.

Trotz dieser Probleme haben Listen-Server einige Vorteile.

Einfach einzurichten : Die meisten Listen-Server sind nichts anderes als "Neues Spiel" zu spielen und Leute mitmachen zu lassen. Dies ist einfach für Leute, die nur mit ihren Freunden spielen möchten und nicht versuchen müssen, einen leeren dedizierten Server zu finden oder mit anderen Leuten zu spielen.

Gut zum Testen : Wenn jemand einen dedizierten Server besitzt und seine Konfiguration ändern möchte, ist es im Allgemeinen besser, ihn zu testendie Konfiguration zuerst. Der Benutzer müsste entweder eine Sicherungskopie des dedizierten Servers erstellen und blind auf die Änderungen eingehen. Die einzige Möglichkeit besteht darin, ein Rollback durchzuführen, wenn etwas schief geht, einen neuen dedizierten Server zu erstellen, um sie zu testen, oder einfach einen einfachen Listen-Server zu erstellen teste sie. Und in Punkt 1 sind diese im Allgemeinen einfacher zu starten und zu konfigurieren. Dies gilt insbesondere, da die meisten dedizierten Server nicht sofort vom Administrator abgerufen werden können (die meisten dedizierten Server werden von einem Remotestandort aus gemietet). Es dauert viel länger, Konfigurationsänderungen sowie Befehle zum Neustart usw. an einen Remotestandort zu übertragen, als auf einem Computer, auf dem sich der Administrator derzeit befindet.

Weniger Ressourcen : Auf den meisten dedizierten Servern kann ein Benutzer mit derselben IP keine Verbindung zum dedizierten Server herstellen (dh der Client muss entweder den Server hosten oder spielen, er kann nicht beides). Wenn der Client auf seinem eigenen Server spielen möchte, benötigt er normalerweise einen zweiten Computer, um den Server zu hosten, oder kauft oder mietet einen dedizierten Server, damit er tatsächlich darauf spielen kann. Ein Listen-Server benötigt nur einen Computer. Dies ist möglicherweise das einzige, was der Client verwenden kann.

In beiden Fällen haben beide Vor- und Nachteile, und Sie müssen sie mit dem abwägen, was Sie entwerfen und implementieren möchten. Aus meiner Erfahrung glaube ich, dass wenn Sie einen Listen-Server implementieren würden, dieser verwendet würde, wenn er nur für ein paar Benutzer verwendet wird, die mit Freunden herumspielen oder Einstellungen testen möchten.

Zuletzt:

Welche anderen Optionen habe ich?

Dies ist eine industrielle Dose Würmer. In der Realität kann jede Art von Netzwerkarchitektur auf Videospiele angewendet werden. Wie ich jedoch gesehen habe, läuft das meiste, wie die meisten Internetkommunikationen, auf eine Art Client-Server-Modell hinaus.

Bitte lassen Sie mich wissen, wenn ich Ihre Frage nicht beantwortet habe oder wenn Sie etwas Erweitertes benötigen, und ich werde sehen, was ich tun kann.

shmeeps
quelle
"Auf den meisten dedizierten Servern kann ein Benutzer mit derselben IP keine Verbindung zum dedizierten Server herstellen (dh der Client muss entweder den Server hosten oder spielen, er kann nicht beides)." WAT? Wo? Warum? Wenn einige Server diese scheinbar sinnlose willkürliche Einschränkung haben, bedeutet dies nicht, dass er gezwungen wäre, dasselbe zu tun, wenn er eine schreibt ...
o0 '.
Es ist ein Artefakt aus älteren Spielen, als Computer Serveralgorithmen, Grafikberechnungen und Spielelogik nicht gleichzeitig verarbeiten konnten. Viele dedizierte Servermodelle würden verhindern, dass ein Client, der versucht hat, eine Verbindung von demselben Computer herzustellen, erfolgreich eine Verbindung herstellt. Diese Vorgehensweise wird in einigen Spielen noch heute durchgesetzt. Ich habe nie gesagt, dass dies für alle Modelle gilt, und ich habe auch nicht gesagt, dass er sein Modell an dieses spezielle Paradigma anpassen muss. Technisch gesehen macht das Zulassen von Verbindungen mit demselben Host jedoch den Zweck des dedizierten Servers zunichte, und der einzige Vorteil besteht darin, dass der Server beim Trennen der Verbindung aktiv bleibt.
Shmeeps