2016-11-30 1 views
0

Als Prototyp mache ich ein Multiplayer-Spiel auf einer Leinwand mit Javascript und Websockets. Die Bedingungen sind, dass der Server den Canvas in keiner Weise generieren kann. Die gesamte Modelllogik geschieht auf der Client-Seite.Wie man eine Netzwerkarchitektur macht, ohne dass der Server autorisierend ist

Im Moment habe ich die folgende Einstellung:

1) Wenn eine Eingabe auf der Client-Seite kommt es auf den Server übertragen und gespeichert. Der Server führt eine sehr einfache Validierungsprüfung durch.

2) Alle 15 ms (auf dem Server) werden alle Eingaben an die Clients gesendet und gelöscht. Die Clients geben die Eingabe lokal wieder.

3) Jede 200 ms jeder Kunde ihre Version der Leinwand an den Server senden, wo es

4) alle 200 ms die Server-Stimmen für die „richtige“ Version gespeichert wird, und senden Sie es an die Clients unterstützt, wo sie Aktualisieren Sie ihre Leinwand. Die richtige Version ist auf dem Server mit einem Zeitstempel gespeichert.

5) Wenn ein neuer Client eine Verbindung herstellt, erhalten sie die letzte richtige Version des Zeichenbereichs vom Server.

Während dieser Ansatz Multiplayer-Farbe mit einem dauerhaften Zustand bietet, trägt es auch einige Probleme. Was ist die richtige Version und wie wählen sie? Was passiert, wenn ein Client eine Verzögerung von etwa 10 Sekunden verspürt und dann seine Version sendet? Wenn jeder Client konstante lokale Änderungen vornimmt, wird die Arbeitsfläche für jeden Client nie ganz gleich sein, was es unmöglich macht? um die richtige Version der Zeichenfläche zu finden, da sie sich alle unterscheiden, wenn sie an den Server gesendet werden.

Die Frage kann auf: Es ist möglich, eine zuverlässige Client-Server-Architektur zu machen, wo der Client die gesamte Logik und der Server nur prüft, ob die Eingabe gültig ist? Auch wenn dies mehr Netzwerkverkehr mit sich bringt. Und wenn ja, was wäre eine gute Annäherung?

+0

Vielleicht sollten die Clients ihre Arbeitsfläche immer zusammen mit den Eingängen alle 15 ms senden. Der Server verwirft die Canvas-Daten die meiste Zeit außer alle ~ 200 ms, dann speichert er eine Version des Canvas. Dies wird natürlich die Verkehrsbelastung erheblich erhöhen :) – xCander

Antwort

0

Bei weiterer Untersuchung fand ich einige ausgezeichnete Dokumentation zu dem obigen Problem.

Ein Client-Only-Netzwerk-Modell kann als Peer-Exchange-Modell beschrieben werden und war tatsächlich, was im Zeitalter der Imperien 1 + 2 verwendet wurde. Da Microsoft jedoch Probleme hatte, die Clients synchron laufen zu lassen (und kleine Variationen das Spiel kaputt machten), entschied ich mich stattdessen für ein Servermodell mit einigen Verknüpfungen, um den Server tatsächlich zu aktivieren, die Modelle zusammenzuführen.

Verwandte Themen