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?