делал как-то движок для не-экшн механики. Команд было мало: нужно успеть сделать правильный выбор за ограниченное время. Консолидировать результаты.
Сервер принимает сообщения от игроков. Некоторые тут же форвардит остальным подключённым к нему. Некоторые вызывают серверное событие, и уже оно рассылает всем какое-то сообщение.
Т.к. один серв держит ограниченное число подключений (около 30 тыс в нашем случае), серверов несколько. Каждый напрямую отвечает за подключённых к нему игроков. И идёт меж-нодовая коммуникация: каждая нода шлёт остальным, например, сообщение для всех подключённых игроков. Или в конце консолидируется счёт и рейтинг.
С зажатой клавишей, наверное, достаточно события нажатия, и события снятия. Вычисление позиции на карте при таком управлении не тяжёлая вычислительная задача – можно параллельно считать на сервере, наверное. Раз в пару секунд синхронизируя координаты между сервером и игроком.
Время должно быть точно синхронизировано между каждым игроком и сервером. Несмотря на сетевые задержки, эта задача решается протоколом NTP. Общее время позволяет сопровождать важные события отметками времени.
Можно добавить предиктивность: если игрок сейчас бежит прямо и прямо нет стены, то с бОльшей вероятностью в следующие пол-секунды он продолжит бежать.