Ist es möglich, ein vernetztes Spiel zu erstellen, bei dem jeder Client ein vom Server an ihn gesendetes Pixelarray anzeigt und Eingaben an den Server zurücksendet? Dies wäre viel einfacher zu implementieren als die Verwendung der clientseitigen Vorhersage, aber ich würde mir vorstellen, dass es zu langsam wäre. Wäre es möglich?
networking
multiplayer
rlms
quelle
quelle
Antworten:
Ja, es ist machbar und nein, es ist nicht kosteneffektiv oder performant. Denken Sie darüber nach, wie Netflix funktioniert. Es kann Millionen von Kunden mit 1080p- und sogar 4k-Streaming bedienen.
Warum es sich nicht lohnt, zu versuchen, was Sie mit der aktuellen Technologie vorschlagen:
Sie könnten wahrscheinlich damit durchkommen, die gesamte Logik auf der Serverseite auszuführen. Ich würde niemals empfehlen, das Rendering auf der Serverseite auszuführen. Außerdem sollten Sie die Leistung des Clients nutzen, um auf Eingaben zu reagieren (auch wenn Sie diese später korrigieren), bevor die Antwort vom Service zurückkommt, um die Fluidität zu verbessern.
quelle
Genau damit macht NVIDIA GRID . Die Idee ist, dass das Spiel vollständig auf einem Server läuft. Der Client sendet seine Tastatur- und Mauseingaben an den Server und empfängt einen Videostream (komprimiert mit einem Videocodec, keine unkomprimierten Pixelarrays) von dem, was der Server rendert.
Wie werden sie das Latenzproblem lösen? Ich weiß es nicht, aber NVIDIA scheint ziemlich zuversichtlich zu sein, dass es ihnen gelingen wird, eine Netzwerkinfrastruktur bereitzustellen, die eine ausreichend niedrige Latenz bietet, um Spiele unterhaltsam zu machen. Zumindest scheinen sie viel Geld darauf zu setzen.
quelle
Es funktioniert schon. Viele Spiele liefen über eine Telnet-Verbindung. Schon jetzt können Sie NetHack und viele andere ASCII-kompatible Spiele mit einer 80x25-Konsole spielen. Für ein ziemlich schnelles Gameplay sollten Sie 2000 Charaktere mit einer Rate von 2-5 pro Sekunde übergeben. Das wären 10 Kilobyte pro Sekunde, was in Ordnung ist.
Wenn Sie das Fenster vergrößern, mit dem Sie suchen, werden Sie sehr schnell gegen die Wand stoßen. Es ist keine Bandbreitenwand, sondern eine Latenzwand. Mit dem erhöhten Paket, das Sie über das Netz senden, wird Ihre Antwort widerstrebender sein. Es sieht aus wie "Bandbreiten-Latenz-Fenster", während die Bandbreite erhöht wird, steigt Ihre Latenz aufgrund von Caching überall.
Moderne Spiele können dieses Problem nicht lösen, und selbst einmalige Multiplayer-Spiele - selbst Counter-Strike oder League of Legends - haben Einschränkungen, die die Spielqualität beeinträchtigen, wenn Sie keine Computer haben, die direkt über LAN verbunden sind. Gute Spieler, die an Turnieren teilnehmen, unterscheiden sich von Gelegenheitsspielern, da sie ständig mit einer Latenz von <1 ms spielen.
Das Netzwerkdesign von League of Legends ist jedoch sehr gut synchronisiert. Wenn Sie sie also fragen, zeigen sie Ihnen möglicherweise, wo Sie es kaufen oder verwenden können.
Andere Alternative - "Pass by Elements", dh Sie übergeben Vektorgrafiken über das Netz. Viele Standards werden entwickelt, aber das bekannteste Beispiel ist "xorg-server". Ich habe ein wenig darüber nachgedacht, einen netten kleinen Sender-Empfänger für Vektorgrafiken zu schreiben, aber meiner Erfahrung nach leiden alle unter "Fenstern mit geringer Bandbreite - Latenz". Dies bedeutet, dass die beste Erfahrung mit direkt angeschlossenen Computern erzielt werden kann.
Wenn Sie einfach ein Bild über das Internet senden möchten, gibt es h264-Codecs mit Open Source. Das FFmpeg-Projekt arbeitete an verschiedenen Codecs. Es gibt viele offene Pakete, die von * VNC leicht unterschieden werden können. Normalerweise wird diese Software für die Remoteverwaltung verwendet.
Für Spiele mit kleiner Aktualisierungsrate, wie "versteckte Objekte" usw., ist es ideal, nur das Herunterladen bei Bedarf mit Caching zu implementieren. Browser erlauben dies, aber ich weiß nicht viel über das Schreiben von Browsergames.
quelle