Was ist der beste Weg, um alle Clients mit einem Server und untereinander zu synchronisieren?
Derzeit verfolgen wir zwei Ansätze:
- Wenn ein Client etwas an den Server sendet, sendet der Server sofort Nachrichten an alle Clients, die sofort reagieren.
- Einführung einer gewissen Zeitverzögerung, bei der der Server mit der Anweisung "Nachrichten an alle Clients sendet"
t
.
Der zweite Ansatz scheint eher dazu zu führen, dass alle Clients besser synchronisiert werden (da er eine gewisse Verzögerung aufweist). Ich frage mich jedoch, ob die Reaktionsfähigkeit zu stark verloren gehen würde (dh der Benutzer klickt auf "Springen" und es gibt eine merkliche Lücke zwischen dem Drücken der Taste und dem tatsächlichen Springen).
Es besteht auch die Möglichkeit, dass Clients ihre eigene Position berechnen (und nicht darauf warten, dass Server sagen, dass Sie gesprungen sind). Aufgrund der unvermeidlichen Verzögerung würden die Clients jedoch nicht mehr synchron sein.
Dann gibt es die ganze Frage zwischen TCP und UDP. weil wir es schnell wollen, aber ich würde es auch hassen, wenn der Server sagt, dass Sie sich an einem völlig anderen Ort befinden, als Sie dachten.
Bei all diesen konkurrierenden Anforderungen wird es sehr ungewiss, wie wir dieses Problem angehen sollen. Welcher dieser (oder anderer) Ansätze eignet sich am besten, um Clients und Server synchron zu halten? Welche werden in der Branche tatsächlich eingesetzt?
quelle
Hier sind ein paar gute Links, die eine Menge Networking für Spiele abdecken.
Und dies ist der erste Teil der mehr praktischen Netzwerkserie. http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/
Für die Geschichte. 'Es tut uns leid, aber als Spam-Präventionsmechanismus können neue Benutzer nur maximal einen Hyperlink posten. Verdiene dir 10 Ruf, um mehr Hyperlinks zu posten. ' Schauen Sie sich trotzdem auf seiner Website um.
quelle
Da Sie Clients und Server erwähnen, gehe ich davon aus, dass es sich um eine Client / Server-Architektur handelt, bei der der Server die Autorität für den Status aller Objekte ist.
Hinweis: Die Alternative ist eine Peer-to-Peer-Architektur, bei der der Eigentümer eines Objekts die Berechtigung für dieses Objekt ist.
Es gibt bereits eine bewährte Methode zum Synchronisieren von sich bewegenden Objekten mithilfe der Client-Server-Architektur. Es heißt Dead Reckoning. .
Ein guter Weg, dies in einem Spiel zu implementieren, wäre folgender:
quelle