Ich habe eine Server/Client-Architektur implementiert, wo alle Statusänderungen an die Funktion gesendet, validiert und an alle verbundenen Clients übertragen werden. Dies funktioniert ziemlich gut, aber das System behält die Synchronisierung zwischen den Client-Instanzen des Spiels ab sofort nicht bei.Multiplayer-Spiel-Synchronisation
Wenn es zwischen dem Server und einem bestimmten Client zu einer Verzögerung von 5 Sekunden kam, würde er die Statusänderung 5 Sekunden nach dem Rest der Clients erhalten, wodurch der Spielstatus nicht mehr synchron war. Ich habe nach verschiedenen Möglichkeiten gesucht, ein Synchronisationssystem zwischen den Clients zu implementieren, habe aber bisher nicht viel gefunden.
Ich bin neu in der Netzwerkprogrammierung, und nicht so naiv zu denken, dass ich ein funktionierendes System selbst erfinden kann, ohne dass ich dafür viel Zeit aufwenden muss. Die Idee, die ich habe, ist jedoch, ein Zeitsystem zu haben, so dass jede Zustandsänderung mit einem bestimmten Zeitstempel im Spiel verbunden ist. Auf diese Weise würde ein Kunde, wenn er eine Statusänderung erhalten würde, genau wissen, in welcher Spielperiode die Änderung stattgefunden hat, und würde dann in der Lage sein, für die Verzögerung zu korrelieren. Das Problem mit dieser Methode ist, dass in diesen Sekunden Verzögerung das Spiel auf der Client-Seite fortgesetzt hätte, und somit der Client müsste Rollback rechtzeitig für die Zustandsänderung aktualisieren, die definitiv unordentlich werden würde.
Also ich bin auf der Suche nach Papieren Diskussion die Themen oder Algorithmen, die es löst. Vielleicht ist mein gesamtes Design, wie das Multiplayer-System funktioniert, fehlerhaft, in dem Sinne, dass die Spielinstanz eines Clients nicht aktualisiert werden sollte, wenn nicht vom Server eine Idee empfangen wird? Im Moment aktualisieren sich die Clients nur selbst in ihrer Spielschleife, vorausgesetzt, dass sich keine Zustände geändert haben.
Interessante Frage. – Ian
Ich glaube, du solltest die akzeptierte Antwort noch einmal überdenken. Havenard sagte nichts über Totzeitrechnungen oder andere Lag-Versteck-Techniken, die heute benutzt werden. Es ist nicht so, dass Spiele einfach "verzögerte Spieler sollten ihre Bedingung akzeptieren"; Sie bemühen sich, den Lag zu verstecken, um das Spiel spielbarer zu machen. Wenn ich schließlich ein Spiel spielte, in dem die Leute überall herumspringen und ich kaum spielen könnte, würde ich das Spiel verdammt schnell verlassen. – Ricket