Qual è il modo migliore per mantenere tutti i client sincronizzati con un server e tra loro?
Attualmente, abbiamo in mente due approcci:
- Quando un client invia qualcosa al server, il server invia immediatamente messaggi a tutti i client, che reagiscono immediatamente.
- Introducendo un certo ritardo, in base al quale il server invia messaggi a tutti i client, con la direttiva, "agire su questo alla volta
t
.
Il secondo approccio sembra che molto probabilmente manterrebbe tutti i client in una migliore sincronizzazione (poiché provvede a un certo ritardo); ma mi chiedo se la reattività verrebbe persa in misura troppo elevata (cioè l'utente fa clic su "salta" e c'è un notevole divario tra la pressione del pulsante e il salto effettivo).
C'è anche la possibilità che i client calcolino la propria posizione (e non aspettino che i server diano "sei saltato"); ma a causa dell'inevitabile ritardo, i clienti sarebbero molto fuori sincrono.
Poi c'è l'intera domanda TCP vs. UDP; perché lo vogliamo velocemente, ma odio anche il server per dire che sei in una posizione completamente diversa da come pensavi di essere.
Con tutte queste esigenze in competizione, tutto diventa molto incerto su come dovremmo affrontare questo problema. Quale di questi approcci (o qualsiasi altro) sarebbe meglio per mantenere sincronizzati client e server? Quali sono effettivamente utilizzati nel settore?