Quelle est la meilleure façon de garder tous les clients synchronisés avec un serveur et entre eux?
Actuellement, nous avons deux approches en tête:
- Lorsqu'un client envoie quelque chose au serveur, le serveur envoie immédiatement des messages à tous les clients, qui réagissent immédiatement.
- Introduire un certain délai, par lequel le serveur envoie des messages à tous les clients, avec la directive, "agissez en conséquence
t
.
La deuxième approche semble comme elle aurait plus de chances de maintenir tous les clients dans une meilleure synchronisation (car elle répond à un certain degré de retard); mais je me demande si la réactivité serait perdue à un degré trop élevé (c'est-à-dire que l'utilisateur clique sur «sauter» et qu'il y a un écart notable entre appuyer sur le bouton et sauter réellement).
Il y a aussi la possibilité pour les clients de calculer leur propre position (et de ne pas attendre que les serveurs disent "vous avez sauté"); mais en raison du décalage inévitable, les clients seraient très désynchronisés.
Ensuite, il y a toute la question TCP vs UDP; parce que nous le voulons rapidement, mais je détesterais aussi que le serveur dise que vous êtes dans un endroit complètement différent de ce que vous pensiez être.
Avec toutes ces demandes concurrentes, il devient très incertain comment nous devons aborder cette question. Laquelle de ces approches (ou toute autre) serait la meilleure pour garder les clients et le serveur tous synchronisés? Lesquels sont réellement utilisés dans l'industrie?
la source
Voici quelques bons liens qui couvrent énormément de réseaux de jeux.
Et ceci est la première partie de la série de réseautage plus pratique. http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/
Pour l'histoire. «nous sommes désolés, mais en tant que mécanisme de prévention du spam, les nouveaux utilisateurs ne peuvent publier qu'un maximum d'un hyperlien. Gagnez 10 points de réputation pour publier plus d'hyperliens. Il suffit de regarder son site Web, de toute façon.
la source
Puisque vous mentionnez les clients et les serveurs, je vais supposer que vous parlez d'une architecture client / serveur où le serveur est l'autorité sur l'état de tous les objets.
Remarque: L'alternative est une architecture d'égal à égal où le propriétaire d'un objet est l'autorité pour cet objet.
Il existe déjà une méthode éprouvée pour synchroniser les objets en mouvement à l'aide d'une architecture client-serveur. C'est appelé Dead Reckoning. .
Un bon moyen de l'implémenter dans un jeu serait comme ceci:
la source