Die meisten MMORPGs haben ein Worldsave-System, das alle X Stunden alle Zeichen speichert. Ich denke, der Grund ist die Leistung. Warum ist dies in Bezug auf die Leistung besser als das Speichern eines Zeichens beim Trennen der Verbindung?
networking
mmo
databases
bunden
quelle
quelle
Antworten:
Dies ist nicht für die Leistung. Dies ist ausfallsicher. Wenn die Welt alle paar Minuten spart, passiert etwas mit dem Server und fährt ihn herunter, verlieren alle nur ein paar Minuten Fortschritt.
Wenn der Server ein Problem hat, verliert jeder Benutzer alles, was er seit seiner Anmeldung getan hat, indem er beim Trennen spart. Bei Spielen mit besonders langer Spieldauer (wie dies bei MMOs üblich ist) gehen erhebliche Datenmengen verloren.
Sie opfern ein wenig Leistung, um das Risiko des Verlusts von Massendaten zu beseitigen.
Natürlich können Sie die Player-Daten problemlos auf den Client-Computern speichern und so den Netzwerkverkehr reduzieren. Das Problem hierbei ist, dass es offen für Hacking ist. Sobald eine Person das Betrügen erarbeitet hat, teilt sie es und jeder tut es.
BEARBEITEN : Wie @Philipp hervorhob , wird dadurch auch die Möglichkeit zum Duplizieren von Elementen aufgehoben . Bei einem System zum Speichern beim Trennen von Verbindungen werden bei einer Transaktion, die vor einem Serverabsturz ausgeführt wird, und bei einer Abmeldung einer Person vor dem Absturz beide Spieler auf den letzten Zeitpunkt zurückgesetzt, bei dem sie sich abgemeldet haben. Dabei werden die Elemente entweder gelöscht oder dupliziert.
quelle
Frühe Systeme, die nur beim Trennen der Verbindung gespeichert wurden, wurden in der Regel auch regelmäßig gespeichert, während der Player aktiv war. In diesen Systemen, in der Regel MUDs (Multi-User Dungeons), wurde der Charakter so lange im Speicher gehalten, bis er regelmäßig in einer Datei abgelegt wurde.
Dies bedeutete, dass ein Benutzer, der die Verbindung ohne "Zelten" getrennt hatte, in der Regel mehrere Räume entfernt war und beim letzten Speichern eine Menge Beute, EP usw. verpasste. In dieser Hinsicht hat es sich sehr ähnlich verhalten, wie Konsolen-RPGs heute gespielt werden (Sie müssen Ihr Spiel speichern, ohne die Konsole auszuschalten, oder Sie verlieren alles seit dem letzten Speichern).
Das System funktionierte für seinen beabsichtigten Zweck, da Charaktere nicht miteinander interagieren konnten, außer möglicherweise über ein "Mail" -System, in dem sie Nachrichten und Gegenstände aneinander senden konnten. Die Wahrscheinlichkeit, Gegenstände zu verlieren und Fortschritte zu machen, war in der Regel recht hoch, betraf jedoch jeweils nur einen Charakter.
Die Weltsparfunktion entstand, weil die Charaktere schließlich in der Lage waren, direkt miteinander zu interagieren, so dass alle gespielten Charaktere in einem konsistenten Zustand sein mussten, da es sonst zu Duplizierungen und Löschungen von Gegenständen kommen konnte. Dies war im MUD-Szenario kein Problem, da es schwierig war, das System auf eine Weise zu missbrauchen, die zu doppelten Artikeln oder Währungen führte. In frühen MMO-MUDs war dies jedoch unglaublich einfach. Spieler A gibt Spieler B einen Gegenstand, Spieler B speichert und Spieler A trennt die Verbindung, ohne zu speichern. Sofortige Vervielfältigung.
Worldsave ist kein Leistungsvorteil, sondern wurde entwickelt, um Betrug zu verhindern. Ich erinnere mich, dass ich auf Systemen gespielt habe, auf denen das Worldsave-Ereignis buchstäblich im Voraus angekündigt wurde, und oft das gesamte System für eine Minute aufgehängt habe, während der Server alle seine Dateien aktualisiert hat. Dies verhinderte zwar das Betrügen, war jedoch für die Benutzer dieser Systeme nicht sehr bequem.
Das führt uns zum aktuellen Stand der Dinge. Heutzutage verwenden wir keine Worldsave-Type-Funktionen. Wir benutzen Datenbanken. Auf diese Weise können wir sicherstellen, dass Duplikate und Löschvorgänge so weit wie möglich minimiert werden. Die Charaktere existieren als Datensätze in einer Datenbank und jede Transaktion zwischen Spielern ist eine wörtliche Datenbanktransaktion. Entweder ist die Aktion vollständig festgeschrieben oder es wird ein Rollback durchgeführt.
Abgesehen von ungewöhnlichen Fehlern im System erhalten Sie die Vorteile des Speicherns einzelner Zeichendateien (schnelle Speicherzeiten) und die Vorteile der Weltspeicherung (kein Schummeln), ohne die Nachteile von beidem (Verlust erheblicher Fortschritte und Duplizierung von Objekten).
Wenn Sie ein modernes MMO entwerfen, möchten Sie gespeicherte Prozeduren in einer Datenbank erstellen und diese Prozeduren zum Ausführen von Transaktionen verwenden. Wenn Sie beispielsweise zwischen zwei Spielern tauschen, könnte dies so aussehen:
(Hinweis: Diese SQL ist nicht in praktischer Weise geschrieben und soll nur ein Beispiel sein.)
Auf diese Weise kehrt das System bei einem Absturz vor dem Festschreiben in einen Zustand zurück, in dem Spieler 111 und Spieler 333 noch die ursprünglichen Gegenstände haben, während der Handel nach dem Festschreiben abgeschlossen ist. Es gibt keine Möglichkeit zur Vervielfältigung, da die Zeichen gleichzeitig gespeichert werden, wie dies von der Datenbank garantiert wird.
quelle