Я реализовал архитектуру сервер / клиент, в которой все изменения состояния отправляются в функцию, проверяется и транслируется всем подключенным клиентам. Это работает довольно хорошо, но система не поддерживает синхронизацию между клиентскими экземплярами игры на данный момент.
Если между сервером и конкретным клиентом будет 5-секундная задержка, он получит изменение состояния через 5 секунд после остальных клиентов, в результате чего он не будет синхронизирован с игровым состоянием. Я искал различные способы реализации системы синхронизации между клиентами, но пока не нашел много.
Я новичок в сетевом программировании и не настолько наивен, чтобы думать, что я могу сам изобрести работающую систему, не уделяя ей много времени. Однако у меня были идеи сохранить какую-то систему времени, чтобы каждое изменение состояния было связано с определенной временной меткой в игре. Таким образом, когда клиент получит изменение состояния, он будет точно знать, в какой период игры произошли изменения, и, в свою очередь, сможет сопоставить это отставание. Проблема с этим методом заключается в том, что в этом n секундах задержка игра продолжалась бы на стороне клиента, и, таким образом, клиент должен был бы вовремя откатиться, чтобы обновиться для изменения состояния, которое определенно стало бы грязным .
Так что я ищу документы, обсуждающие темы или алгоритмы, которые это решают. Возможно, весь мой дизайн работы многопользовательской системы ошибочен, в том смысле, что игровой экземпляр клиента не должен обновляться, если от сервера не получено представление? Прямо сейчас клиенты просто обновляют себя в своем игровом цикле, предполагая, что какие-либо состояния не изменились.