Nun, es gibt dieses Buch - das jetzt ein bisschen alt ist und das ich nie wirklich gelesen habe, aber es stammt von einem seriösen Verlag. Ich habe auch dieses gefunden , das neuer ist, aber ich habe noch nie davon gehört. Beide behaupten, MMO- (oder zumindest Online-) Spieleentwicklungsprobleme abzudecken; Die clientseitige Vorhersage ist jedoch unabhängig von der Größe Ihrer gleichzeitigen Spielerbasis mehr oder weniger gleich, und Google verfügt über zahlreiche Informationen dazu .
Es ist wichtig zu wissen, dass es für einen Indie- / Hobby-Entwickler aus praktischer Sicht ziemlich schwierig ist, ein Spiel zusammenzustellen, das populär genug ist, um sogar genug Spieler zu gewinnen, um eine theoretische maximale Parallelität zu erreichen, die hoch genug ist, um als "massiv" angesehen zu werden. Aber die Techniken können für die Forschung immer noch lehrreich sein.
Es gibt zwei Hauptklassifikationen von Dingen, die Sie tun können:
- Seien Sie aggressiv, wenn Sie nur die minimale Datenmenge an die minimale Gruppe von Clients senden, die diese benötigen.
- Entwerfen Sie ein Spiel, das den Spielern keinen Anreiz gibt, sich zu sehr zu sammeln, und das Ihnen dabei hilft, die "Gruppe von Kunden, die Dinge benötigen" im Allgemeinen klein zu halten.
Das zweite Problem ist wirklich ein Problem des Spieldesigns und der sozialen Manipulation - es ist besonders schwierig, da Multiplayer-Spiele von Natur aus sozial sind. Dies ist Teil ihrer Attraktivität, sodass Sie Gruppen von Spielern nicht zu sehr entmutigen möchten. Auf der anderen Seite wird ein Spiel, bei dem jeder auf der Welt den einen Kerl spawnt, der die beste Beute im Spiel fallen lässt, schwer zu skalieren sein.
Bei der ersten Option können Sie abgestufte Nachrichtenübermittlung in Betracht ziehen. Es gibt einige Dinge bei anderen Spielern, die immer wichtig sind, z. B. Positionen. Andere Dinge, wie z. B. die Gesundheit, sind für Objekte, die der aktuelle Spieler noch nicht sehen kann, möglicherweise nicht so wichtig. Sie steuern also, was Sie an diesen Spieler senden, basierend auf der relativen Entfernung aller anderen Einheiten in seiner Nähe - dies ist im Wesentlichen eine Drosselung die Daten, die Sie senden, wie Sie im letzten Teil Ihrer Frage erwähnt haben, sowie sie filtern.
Sehr große Multiplayer-Architekturen puffern auch Berichte, für die keine sofortigen Maßnahmen erforderlich sind. An den Server gesendete Nachrichten zum Speichern von Zeichen können in Deltas mit vollständigen Aktualisierungen nur an kritischen Punkten ausgeführt werden. Diese Aktualisierungen können auf einem Drosselserver gepuffert werden, sodass sie an den Server gesendet werden, der die Zeichendaten tatsächlich in einem stabilen Zustand hält. Regelmäßige Art und Weise - Wenn Ihre Player-Basis skaliert, müssen Sie sich um die Optimierung der Festplatten-E / A sowie des Netzwerkverkehrs kümmern. Sie möchten nicht, dass Ihre Charakterdatenbank verprügelt wird.
Die Paketrate und -größe ist von Spiel zu Spiel sehr unterschiedlich, genau wie bei Nicht-MMO-Spielen. Es ist wirklich eine sehr anforderungsspezifische Sache und es gibt keine allgemeinen Standards.
Informieren Sie sich zusätzlich zu der obigen Antwort über TCP_NODELAY und die Funktionsweise der Fensterskalierung. Das Verständnis der Details von TCP (und ja, Sie möchten TCP und nicht UDP verwenden, es sei denn, die Aussicht, differenzielle Aktualisierungen zu verarbeiten, die nicht in der richtigen Reihenfolge eingehen, macht Ihnen Spaß) und die erneute Übertragung sind für die Latenzkontrolle von entscheidender Bedeutung.
quelle