Serverseitige physikalische Simulationen mit Hunderten von Spielern


9

Ich arbeite derzeit an einem physikorientierten Einzelspieler-Spiel, bei dem die Physik serverseitig simuliert werden soll. Dies liegt daran, dass das Spiel Bestenlisten, anhaltende Spielerfortschritte usw. hat und ich jede Art von Betrug verhindern möchte - im Grunde genommen eine reine Client-Server-Architektur, der Client ist „dumm“ und zeigt nur an, was der Server von Ihnen verlangt.

Das Problem ist jedoch, dass das Spiel höchstwahrscheinlich von Hunderten (vielleicht Tausenden) von Menschen gleichzeitig gespielt wird. Dies betrifft mich, da es höchstwahrscheinlich die Server-Verarbeitungsleistung beeinträchtigen wird, wenn ich Hunderte von Zuständen gleichzeitig ausführen und warten muss.

Ich hätte keine Probleme damit, alle Physiksimulationen auf die Clientseite zu verschieben, aber dann würde ich wirklich einen Weg brauchen, um zu validieren, ob das Ergebnis einer Client-Simulation gültig ist. Ich kann jedoch nicht herausfinden, wie.

Ich habe darüber nachgedacht, die Simulationsserverseite hin und wieder auszuführen, um zu überprüfen, ob der Client noch fair spielt, aber ich möchte wirklich, dass der Server so wenig wie möglich belastet wird.

Die Physik wird ungefähr so ​​komplex wie die GDC 2011-Demo von Glenn Fiedler , vielleicht sogar noch einfacher. Es werden jedoch viel mehr immer kollidierende starre Körper in einer einzigen Szene sein und sie werden alle gleichzeitig sichtbar sein.

Es fällt mir schwer, eine Antwort auf diesen speziellen Fall zu finden, da die meisten Ressourcen im Internet - auch hier ist Glenn Fiedlers Website eine großartige - über kleine vernetzte Physik sprechen (z. B. ein FPS mit 30 Spielern wie Halo).

Alle Ratschläge, Websites, Papiere oder dergleichen zu diesem Thema werden sehr geschätzt.

Eine Zusammenfassung der Fragen, auf die ich eine Antwort haben möchte:

  • Wie realisierbar ist ein Client-Server-Modell? Ist meine Server-Verarbeitungsleistung legitim und geerdet?
  • Ist es möglich, eine vom Client auf dem Server ausgeführte physikalische Simulation zuverlässig zu validieren? Wenn das so ist, wie?

Ich werde diese Frage etwas länger offen lassen, in der Hoffnung, dass mehr Menschen ihre Gedanken veröffentlichen. Mein Dank geht an diejenigen, die es bereits getan haben!
Lennard Fonteijn

Solange verschiedene Clients unabhängig sind, sollten Sie keine Probleme haben, horizontal zu skalieren. Verwenden Sie so etwas wie EC2 und stellen Sie die Kapazität nach Bedarf online.
Ipeet

1
Wo ist das Problem, wenn jemand in einem Einzelspielerspiel betrügt? Lassen Sie sie einfach die Idee der Rangliste fallen und konzentrieren Sie sich darauf, ein lustiges Einzelspielerspiel zu machen
Maik Semder

2
"Ist es möglich, eine vom Client auf dem Server ausgeführte physikalische Simulation zuverlässig zu validieren?" Ja, es ist möglich, es zu validieren, aber lesen Sie Ihre Kommentare unten: Ihre Planung, RL-Geld an Top-Scores auszugeben, ähnelt einem Dartspiel, dh nach der ersten Wurfphysik. Das Problem hier ist weniger, die Physik zu validieren, das ist einfach. Das Problem ist, dass Sie Betrüger haben, die ein Computerprogramm den Wurf machen lassen, um ihnen perfekte Ergebnisse zu liefern.
Daniel Carlsson

Servervalidierte Physik in einer gemeinsamen Welt ist durchaus möglich, DCUO ist ein gutes Beispiel dafür. Bitte beachten Sie, dass "Server" wirklich "eine Reihe von Serverboxen" bedeutet, während Sie scheinbar in Form eines "Servers" schreiben, der eine einzelne Box ist, die irgendwo sitzt. Sie können derzeit nicht Tausende unabhängiger Akteure im selben physischen Raum simulieren, daher mangelt es an Diskussionen darüber. Was Sie tun können, ist, Tausende von Spielern auf unabhängige Simulationsinseln zu verteilen, die nicht interagieren.
Patrick Hughes

Antworten:


5

Sie können die Übermittlungen anderer Benutzer clientseitig überprüfen und den Client dem Server melden lassen, wenn eine Übermittlung ungültig erscheint.

Dann können Sie Maßnahmen ergreifen (entweder den Betrüger verbieten oder verbieten, wer den falschen Bericht gefälscht hat). Um selbst zu überprüfen, ob diese Übermittlung wirklich ungültig ist oder nicht, können Sie einen speziellen Client oder was auch immer verwenden.


3
Das ist eigentlich verdammt schlau! Hätte nicht daran gedacht, offensichtlich müssten mindestens 2 oder 3 Clients die Simulation ausführen, falls der Client eine andere Person ausführt, deren Simulation betrügt. In diesem Fall kann der Server immer die endgültige Simulation durchführen, wenn alle Clients etwas Seltsames melden .
Lennard Fonteijn

1

Ihr Spiel ist Einzelspieler, die einzige "Interaktion" mit den anderen Spielern ist ein Leaderbord. Sie könnten eine Instanz erzeugen, um eine Simulation auf Ihrem Server für jede Übermittlung zu überprüfen. Sie benötigen nicht alle Tricks, um sicherzustellen, dass die Physik über 30 Clients gleich ist. Ich glaube, Sie benötigen nicht mehr Ressourcen als seitdem Die Physik funktioniert bereits :).

Das Überprüfen jedes Ergebnisses ist etwas übertrieben. Sie können die Simulation komprimiert an den Server senden, wenn jemand eine Punktzahl an das Leaderbord sendet, und dann nur die besten 5% auf Ihrem eigenen Server oder sogar die besten 1% oder sogar überprüfen klüger überprüfen Sie nur neue Highscores und gehen Sie davon aus, dass jeder, der nicht besser als # 1 ist, wahrscheinlich eine nicht betrogene Simulation hat.

Ich weiß nicht, ob Ihre Simulation so ist, eingerichtet ist und nicht interagiert (leicht zu überprüfen) oder ob Spieler mit der Sim interagieren können, während sie läuft, aber stellen Sie sicher, dass Sie Ihre Physik so ausführen, dass sie anders schwebt Punktdarstellungen bringen nichts durcheinander und lassen einen gültigen Lauf ungültig aussehen.


Ich möchte nicht auf die Einzelheiten des Gameplays selbst eingehen, aber Sie können mein Spiel mit dem des Dartspiels vergleichen: Sobald Sie den Wurf anvisiert und ausgeführt haben, übernimmt die Physik und es gibt nichts, was Sie daran ändern können nicht mehr. Würde dieses Wissen Ihre Antwort ändern?
Lennard Fonteijn

Nein, es würde nichts ändern :). Speichern Sie einfach Wiederholungen auf dem Server und überprüfen Sie nur verdächtige (z. B. neue Highscores)
Roy T.

1

Tun Sie es nicht, ich kann Ihnen versichern, dass die Simulation der Physik ausschließlich auf dem Server eine sehr schlechte Idee ist. Das Hauptproblem ist nicht die Serverlast, sondern die Reaktionsfähigkeit. Die Reaktionsfähigkeit des Kunden wird unglaublich schlecht sein. Der Spieler drückt einen Knopf, dann müssen Sie einen Roundtrip zum Server machen, bevor Sie die Ergebnisse der Simulation erhalten. Ich habe in der Vergangenheit Variationen davon gemacht (meistens nur Knopfdruck), und die Ergebnisse sind nicht schön und sollten nur für sehr langsame Spiele gemacht werden, die keine Chance haben, damit durchzukommen (und selbst in diesen Fällen die wahrgenommenen mangelnde Reaktionsfähigkeit ist ein großes Problem.

Ein besseres Schema, das ich versuchen wollte, wenn sich diese Art von Szenario das nächste Mal zeigt, besteht darin, den Spielern eine sehr kleine Teilmenge Ihrer Spielerbasis auszuwählen. Dann simulieren Sie für kurze Zeit die Serverseite für sie und vergleichen Ihre Ergebnisse mit denen. ohne ihr Wissen. Wenn sie zu stark abweichen (Sie müssen mit einigen Abweichungen rechnen), klassifizieren Sie sie als potenzielle Betrüger und simulieren sie noch eine Weile, um dies zu bestätigen. Was Sie erhalten, ist eine Art Kurve, die davon abhängt, wie stark ein legitimer Spieler im Vergleich zum Server abweicht, beeinflusst von den Netzwerkbedingungen usw., und Sie werden schnell feststellen, dass sich die Betrüger außerhalb dieser Kurve befinden. Dieses System bietet folgende Vorteile:

  • Automatisiert
  • Sie opfern nicht die Reaktionsfähigkeit
  • Da Sie nur eine sehr kleine Teilmenge Ihrer Spielerbasis simulieren, ist die Last überschaubar und sogar skalierbar (möglicherweise wählen Sie weniger Spieler aus, die simuliert werden sollen, wenn die Last hoch ist).
  • Anwendbar auf jedes Spiel, das ich mir vorstellen kann, also sehr wiederverwendbar

Also, wie Roy, sagen Sie im Grunde: Halten Sie es clientseitig, speichern Sie "Wiederholungen", wenn Kunden eine Punktzahl einreichen, und validieren Sie diese Wiederholungen nur gelegentlich (nicht alle, ein kleiner Prozentsatz). Was ist, wenn basierend auf der Punktzahl, die der Kunde einreicht, eine Kreditauszahlung erfolgt - der Spielerfortschrittsteil, Kredite können auch mit echtem Geld gekauft werden (!!!) - empfehlen Sie diesen Ansatz trotzdem? Wenn Betrug zu viele Credits bringt und ich nur ab und zu bestätige, würde ich im Grunde Geld verlieren. Sie können eine Person wahrscheinlich markieren, wenn ihre Punktzahl über einem bestimmten Schwellenwert liegt, aber gibt es einen besseren Weg?
Lennard Fonteijn

Wenn die Physik-Engine deterministisch ist (sollte es sein) und der Server unter Verwendung des gleichen Startzustands und der gleichen Eingaben wie der Client simuliert (was machbar sein sollte), sollten die Ergebnisse innerhalb angemessener Gleitkomma-Fehlergrenzen liegen (unbedeutend). Selbst wenn es zufällige Effekte gibt und es nicht möglich ist, den RNG-Status zu überschreiten, können Sie die Zufallszahlen übergehen und sie zur Überprüfung verwenden (und sogar ihre Verteilung überprüfen, falls das Fudgen zufälliger Würfe einen großen Unterschied im Spiel macht). .
Ipeet

Wenn es um Credits geht, sollten Sie jede einzelne Wiederholung überprüfen, da das Betrügen nicht mehr dazu dient, ganz oben auf der Highscore-Liste zu stehen, sondern Geld zu verdienen. Sie wollen viel mehr Sicherheit, wenn es um Geld geht, ich kann Ihnen dort nicht helfen.
Roy T.

@ RoyT. Ich werde das wahrscheinlich trotzdem tun, auch wenn ich kein Geld basierend auf Credits ausbezahle (jemand, den ich falsch verstanden habe?). Ich beabsichtige, eine Null-Toleranz-Richtlinie zu haben, also staple ich einfach die Wiedergabedatei zur Validierung. Wenn es wirklich verdächtig ist, ergreife ich Maßnahmen.
Lennard Fonteijn

1

Wie Daniel sagte, wird das große Problem hier Programme sein, die die Aktion für den Spieler ausführen; Wenn der Spieler ein Roboterarm mit einer Präzision wäre, die normalerweise für die Neurochirurgie bestimmt ist, wäre keine Verzerrung der Physik im Spiel erforderlich.


Ich könnte ein bisschen unklar gewesen sein. Meine Spiele gewähren Ihnen virtuelle Credits, nachdem Sie ein Spiel abgeschlossen haben. Mit diesen Credits können Sie neue Inhalte zum Spielen freischalten. Sie können auch echtes Geld verwenden, um Credits zu kaufen, um Inhalte schneller freizuschalten (wohlgemerkt, es ist nicht Pay2Win, das hasse ich). Ich habe nicht die Absicht, echtes Geld basierend auf Krediten auszuzahlen. Darts waren jedoch nur eine Metapher, um zu beschreiben, wie viel Einfluss ein Spieler auf den Zustand der starren Körper hat. Ich habe keine Angst vor "Zielbots", da dies Ihnen einen Vorteil verschafft.
Lennard Fonteijn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.