Wie werden Massively Multiplayer Online RPG-Spiele gebaut?
Auf welche Serverinfrastruktur bauen sie auf? vor allem mit so vielen Kunden in Echtzeit verbunden und kommunizieren.
Verwalten sie Skripts, die auf Seitenanforderungen ausgeführt werden? oder installierte Dienste, die im Hintergrund laufen und die Kommunikation mit verbundenen Clients verwalten?
Verwenden sie andere Protokolle? weil HTTP es Servern nicht erlaubt, Daten an Clients zu übertragen.
Wie funktionieren die "Engines", um Hunderte von widersprüchlichen Gameplay-Events zentral zu bearbeiten?
Danke für Ihre Zeit.
Ich nehme an, dass die Server fast 99% der Zeit unter Linux, BSD oder Solaris laufen.
Der Server, mit dem Ihr Client spricht, ist ein Server, auf dem Dämonen oder Dienste ausgeführt werden, die inaktiv sind und auf Verbindungen warten. Für Instanzen (Dungeons) wird normalerweise für jede Gruppe ein neuer Prozess gestartet, was bedeuten würde, dass es irgendwo einen Dispatcher-Dienst gibt (analog zu einem Threadpool)
UDP ist das verwendete Protokoll. Es ist schnell, da es keine Garantien gibt, dass das Paket empfangen wird. Es ist dir egal, ob ein bisschen Latenz den Client dazu bringt, seine Weltposition zu verlieren.
Die meisten MMOs haben Zonen, die das auf eine bestimmte Anzahl von Leuten beschränken. Für diejenigen, die 100 Personen in einem Bereich haben, gibt es normalerweise eine hohe Latenz. Der Server muss mit 100en Sprüchen umgehen, die auf seinem Weg gesendet werden. Er muss die Schadensbeträge für jeden einzelnen berechnen. Für die Big Five MMOs stelle ich mir vor, dass es 10-20 sehr intelligente, mathematisch begabte Entwickler gibt, die täglich daran arbeiten und es gibt kein MMO da draußen, das es schon richtig verstanden hat, die meisten brechen nach 100 Spielern.
-
Schauen Sie nach Wowemu (es gibt keine offizielle Website und ich möchte nicht auf diese verlinken) eine zwielichtige Website). Dies basiert auf ApireCore , welches ein MMO-Simulator oder im Grunde ein Reverse-Engineer des WoW-Protokolls ist. So laufen die privaten WoW-Server ab. Soweit ich mich erinnere, ist Wowemu
ApireCore ist jedoch C ++.
Das Backend für Wowemu ist verblüffend einfach (ich habe es 2005 versucht) und wahrscheinlich eine vollständige Vereinfachung des Datenbankschemas. Es gibt Ihnen eine gute Vorstellung davon, was beteiligt ist.
Viele Straßen führen nach Rom, und viele Architekturen führen zu MMORPGs.
Hier sind einige allgemeine Gedanken zu Ihren Stichpunkten:
Dies ist insgesamt ein sehr großes Thema. Ich würde vorschlagen, dass Sie auf Amazon.com nach Büchern zu diesem Thema suchen.
Da MMOs im Großen und Ganzen die Ressourcen eines Unternehmens für die Entwicklung und Bereitstellung benötigen, sind sie zu diesem Zeitpunkt wertvolle Unternehmens-IP. Daher gibt es nicht viele öffentlich verfügbare Informationen über Implementierungen.
Eine Sache, die ziemlich sicher ist, ist, dass MMOs im Großen und Ganzen einen benutzerdefinierten Client und einen 3D-Renderer verwenden und daher kein HTTP verwenden, weil sie keine Webbrowser sind. Online-Spiele werden ihre eigenen Protokolle haben, die auf TCP / IP oder UDP basieren.
Die Spielesimulationen selbst werden mit denselben Techniken wie jedes 3D-Netzwerkspiel erstellt. Sie können also nach Ressourcen für diese Problemdomäne suchen, um mehr zu erfahren.
Für den großen Vater, World of Warcraft, können wir vermuten, dass es sich bei der Datenbank um Oracle handelt, weil Blizzards Jobangebote häufig Oracle-Erfahrung als Voraussetzung / Plus angeben. Sie verwenden Lua für das Scripting von Benutzeroberflächen. C ++ und OpenGL (für Mac) und Direct3D (für PC) können als die Implementierungssprachen für die Spielclients angenommen werden, da Spiele damit gemacht werden.
Eine Firma, die cool darüber ist, ihre Implementierung zu diskutieren, ist CCP, die Eve Online-Entwickler ist. Sie haben eine Reihe von Vorträgen und Artikeln über die Infrastruktur von Eve veröffentlicht und es ist ein besonders interessanter Fall, da sie Stackless Python für viele Eve-Implementierungen verwenden.
Es gab auch einen kürzlich erschienenen Game Developer Magazine Artikel über Eves Architektur:
Traditionell basierten MMOs auf C ++ Server-Anwendungen, die unter Linux mit einer Datenbank für Backend-Speicher und Fat-Client-Anwendungen unter Verwendung von OpenGL oder DirectX kommunizieren.
In vielen Fällen enthalten der Client und der Server eine Skript-Engine, die es ermöglicht, Verhaltensweisen in einer höheren Sprache zu definieren. EVE ist dadurch gekennzeichnet, dass es hauptsächlich in Python implementiert ist und auf Stackless läuft, anstatt hauptsächlich C ++ mit einigen Skripten auf hoher Ebene zu verwenden.
Im Allgemeinen befindet sich der Server in einer Schleife, in der Anfragen von verbundenen Clients gelesen und verarbeitet werden, um die Spielmechanismen zu erzwingen und dann Aktualisierungen an die Clients zu senden. UDP kann verwendet werden, um Latenz und die Übertragung von veralteten Daten zu minimieren, aber da RPGs im Allgemeinen kein Twitch-Gameplay verwenden, ist TCP / IP normalerweise eine bessere Wahl. Comet oder BOSH können verwendet werden, um bidirektionale Kommunikation über HTTP für webbasierte MMOs und Web-Sockets zu ermöglichen, wird bald eine gute Option sein.
Wenn ich heute ein neues MMO erstellen würde, würde ich wahrscheinlich XMPP, BOSH verwenden und den Client in JavaScript erstellen, damit er ohne fetten Client-Download funktioniert und mit XMPP-basierten IM- und Voice-Systemen (wie gchat) zusammenarbeitet. . Sobald WebGL weitgehend unterstützt wird, würde dies sogar Browser-basierte virtuelle 3D-Welten ermöglichen.
Da die Umgebungen zu groß sind, um sie in einem einzigen Prozess zu simulieren, werden sie normalerweise geografisch zwischen Prozessen aufgeteilt, die jeweils einen kleinen Bereich der Welt simulieren. Oft gibt es eine optimale Population für eine Welt, daher werden mehrere Kopien (Shards) ausgeführt, die von verschiedenen Gruppen von Personen verwendet werden.
Es gibt eine gute Präsentation über die Second-Life-Architektur von Ian Wilkes, der hier als Director of Operations tätig war: Ссылка
Die meisten meiner Vorträge zur Second Life Technologie sind mit meinem Blog verlinkt: Ссылка
Tags und Links real-time web-services communication