Designprinzipien für Echtzeit-Multiplayer-Spiele für Node.js

12

Ich habe den Valve- Artikel über Multiplayer-Netzwerke gelesen, der aus Yahn Berniers Artikel von 2001 über Latenzkompensationsmethoden bei der Entwicklung und Optimierung von Client / Server-In-Game-Protokollen stammt . Ich erstelle ein Echtzeit-Multiplayer-Spiel mit einem node.js-Server, der über socket.io mit Clients verbunden ist, und habe einige Fragen zu den unten aufgeführten Prinzipien:

Objektinterpolation

[Interpolation] verhindert die nervöse Bewegung, zu der dies normalerweise führen würde, indem Serveraktualisierungen gepuffert und dann mit den gleichmäßig interpolierten Lücken wiedergegeben werden. Es kann auch vor Störungen schützen, die durch Paketverlust verursacht werden.

Client-seitige Vorhersage

Vorhersage ist die Vorstellung, dass der Client die Auswirkungen der Aktionen des lokalen Spielers vorhersagt, ohne darauf zu warten, dass der Server sie bestätigt. Der vorhergesagte Status einer Entität wird anhand von Serverbefehlen getestet, wenn sie ankommen, bis entweder eine Übereinstimmung oder eine Nichtübereinstimmung festgestellt wird.

Lag Compensation

Verzögerungskompensation ist die Vorstellung, dass der Server die Latenz eines Spielers verwendet, um die Zeit bei der Verarbeitung von [Benutzereingaben] zurückzuspulen, um zu sehen, was der Spieler sah, als der Befehl gesendet wurde. In Kombination mit der Vorhersage kann die Verzögerungskompensation dazu beitragen, die Netzwerklatenz so weit zu verringern, dass sie aus Sicht eines Angreifers nahezu beseitigt wird.

  • Gelten die Prinzipien für TCP genauso wie für UDP und gibt es Unterschiede in der Implementierung? Ich kann sehen, dass die Entitätsinterpolation nicht vor Paketverlust schützen müsste, aber das ist es auch.

  • Kann ich mit UDP und Node.js sogar zwischen einem Server und einem Webbrowser und umgekehrt kommunizieren?

  • Sind diese Prinzipien seit mehr als einem Jahrzehnt in Gebrauch oder ist eine andere Technologie aufgetaucht?

Jede Hilfe wäre sehr dankbar.

Yoshima
quelle
1
Für Multiplayer-Spiele brauchst du eigentlich kein UDP, entgegen der landläufigen Meinung. Lerne von den Besten; WoW verwendet TCP und ich glaube, dass viele andere AAA-Multiplayer-Spiele dies tun. Die Leute befolgen einfach die Ratschläge eines anderen und verbringen dann die nächsten 5 Monate damit, eine schlechte und langsame Version von TCP selbst zu implementieren!
Jcora
1
(Es sei denn, Sie sind sicher, dass Sie über das Wissen und die Ressourcen verfügen, um ein vernünftiges Protokoll auf UDP zu entwickeln, das seine Vorteile nutzen könnte.)
jcora
1
Keine AAA-FPS-Spiele verwenden TCP. Es ist wirklich zu langsam für Spiele, die eine Aktualisierung in Echtzeit erfordern. Aber da er kein Actionspiel schreibt, sollte er in der Lage sein, mit TCP durchzukommen.
Brendan Lesniak
@Yannbane Wusste nicht, dass WoW TCP verwendet. Scheint so, als ob viele MMOs das tun, was ich finden konnte. Macht mich sicherer, wenn ich Multiplayer-Spiele mit HTML5 schreibe. Vielen Dank!
Dreta

Antworten:

6
  • Die Grundsätze zur Reduzierung der Verzögerungsauswirkungen sind unabhängig vom Transportprotokoll gleich. Paketverlust ist ein weiteres Thema - für viele Arten von Paketen ist der Verlust einiger Pakete nicht kritisch, da das nächste Update wahrscheinlich bereits in Vorbereitung ist - hier hat UPD den Vorteil, aber wenn Sie sicherstellen möchten, dass ein bestimmtes Paket zugestellt wird, müssen Sie benutzerdefinierte Einstellungen vornehmen Bestätigungscode, um das mit UDP zu tun
  • Node.js unterstützt UDP, Webbrowser jedoch nicht (ohne Plugins). Die beste Echtzeitmethode für die Kommunikation zwischen den beiden ist Web Sockets, im Grunde genommen TCP. Für die Kommunikation empfiehlt es sich jedoch, Socket.IO zu verwenden, das Fallbacks für Browser bereitstellt, die Web-Sockets nicht unterstützen.
  • Die Prinzipien bleiben gleich.
Tapio
quelle
1
Ich denke, dies ist veraltet - WebRTC sollte der Weg sein, UDP-ähnliche Kommunikation zu nutzen, nicht wahr?
Nikolay Tsenkov
4

Sie sollten diesen Artikel über lesen Echtzeit-Multiplayer-Spiele in HTML5 lesen, der von Sven Bergstrom auf der Website buildnewgames.com veröffentlicht wurde. Er spricht über die gleichen Dinge und verwendet Node.JS. Ich habe selbst etwas Ähnliches vor. Ich recherchiere gerade mehr über die clientseitige Vorhersage und Interpolation und dergleichen, bevor ich versuche, den Rest davon in Angriff zu nehmen.

Ich glaube, es ist definitiv möglich, dies mit Socket.IO und Node zu tun, aber die Technologie ist noch neu, so dass es wenig Dokumentation und wenig bis gar nichts in Bezug auf die Anleitung zur Implementierung geben wird. Ich würde empfehlen, das zu tun, was ich tue, und das Thema in abstrakten, hochrangigen Begriffen sehr detailliert zu studieren und dann zu versuchen, es selbst umzusetzen.

Cory Gross
quelle
1

Ich glaube, die Technologie ist ziemlich ähnlich. Die Konzepte hängen auch nicht davon ab, welche Sprache Sie verwenden oder ob Sie UDP oder TCP verwenden. Ich habe hier eine sehr detaillierte Erklärung des Ganzen geschrieben: http://www.gabrielgambetta.com/fpm1.html , einschließlich hübscher Diagramme :)

ggambett
quelle