1 - невозможно.Вы не знаете точно, сколько времени займет сообщение, чтобы прибыть на клиента, и никакие измерения не обязательно будут применимы к следующему отправляемому сообщению.Лучшее, что вы можете сделать, - это приблизительное значение, но вы всегда должны предполагать, что люди увидят ЛИБО несколько разных вещей ИЛИ одни и те же вещи в несколько разное время.Я бы порекомендовал просто отправить текущее состояние всем и использовать интерполяцию / экстраполяцию, чтобы сгладить игровой процесс, чтобы каждый видел игру через несколько миллисекунд в прошлом, причем задержка варьировалась как между игроками, так и во времени.В общем, это редко большая проблема.Если вы действительно хотите буферизовать некоторые прошлые состояния на сервере, вы можете интерполировать между ними и отправлять разные старые данные разным людям в попытке синхронизировать то, что они видят, но в сочетании с имитацией на стороне клиента и дрожанием во время передачи, которое вы выполняете ».По-прежнему будут наблюдаться некоторые различия между машинами.
2 - типичный способ - запустить симуляцию на сервере и отправлять регулярные (небольшие) обновления состояния клиентам.Клиенты обычно запускают свои собственные симуляции и имеют возможность смешивать свое собственное прогнозируемое / интерполированное состояние с полномочным состоянием, которое сервер отправляет им.Все решения, кроме пользовательского ввода, должны приниматься на стороне сервера.В конечном счете, то, как вы смешиваете их, является просто компромиссом между гладким внешним видом и точным состоянием, поэтому вам придется принять косметическое решение.
3 - ваш клиент обычно должен переводить нажатие клавиши в логическое действие.Ваш сервер не заботится о ключах.Отправьте это логическое действие на сервер, и оно может передать его другим клиентам, если оно им потребуется.В общем, хотя вам здесь не нужно ничего делать - любое соответствующее изменение, вызванное действием, как правило, просто изменит состояние игры и, таким образом, будет отправлено при обычной трансляции этого состояния.