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