Ho un'architettura server/client implementata, in cui tutte le modifiche di stato vengono inviate alla funzione, convalidate e trasmesse a tutti i client connessi. Funziona piuttosto bene, ma il sistema non mantiene la sincronizzazione tra le istanze client del gioco al momento.Sincronizzazione gioco multigiocatore
Se ci fosse un ritardo di 5 secondi tra il server e un particolare cliente, allora avrebbe ricevuto il cambiamento di stato 5 secondi dopo che il resto dei client lo avrebbe lasciato con lo stato di gioco fuori sincrono. Ho cercato vari modi per implementare un sistema di sincronizzazione tra i client ma non ho trovato molto finora.
Sono nuovo alla programmazione di rete, e non è così ingenuo pensare di poter inventare un sistema di lavoro da solo senza dedicare molto tempo ad esso. Le idee che ho avuto, tuttavia, è di mantenere una sorta di sistema temporale, in modo che ogni cambiamento di stato sia collegato a un timestamp specifico nel gioco. In questo modo, quando un cliente riceveva un cambio di stato, avrebbe saputo esattamente in quale periodo del gioco era avvenuto il cambiamento e sarebbe stato in grado di correlare per il ritardo. Il problema con questo metodo è che in quelli n di ritardo il gioco avrebbe dovuto continuare sul lato client, e quindi il cliente avrebbe dovuto eseguire il rollback in tempo per l'aggiornamento per il cambio di stato che sicuramente sarebbe diventato disordinato.
Quindi sto cercando dei documenti che discutano i soggetti o gli algoritmi che lo risolvono. Forse il mio intero progetto su come funziona il sistema multiplayer è imperfetto, nel senso che l'istanza di gioco di un cliente non dovrebbe aggiornarsi a meno che non venga ricevuta la nozione dal server? In questo momento i client si aggiornano appena nel loro ciclo di gioco assumendo che nessuno stato non sia cambiato.
Interessante domanda. – Ian
Credo che dovresti riconsiderare la risposta accettata. Havenard non ha detto nulla sulla resa dei conti o su altre tecniche di occultamento del tempo. Non è il caso che i giochi dichiarino "i giocatori ritardati dovrebbero accettare le loro condizioni"; fanno uno sforzo per nascondere il ritardo al fine di rendere il gioco più giocabile. Dopotutto, se giocassi a un gioco in cui la gente stesse saltando ovunque e non potessi quasi giocare, lascerei quel gioco dannatamente veloce. – Ricket