В сетевой игре у нас нет "настоящего времени", есть история и её симуляция. Клиент симулирует мгновенно, сервер - с отставанием. Нужно, чтобы симуляция на сервере и клиенте приводила к примерно одинаковым результатам (может быть, не идеально одинаково, но "достаточно одинаково")
Вижу три варианта:
1) Написать два разных языка/рантайма на клиенте и сервере. Придумать некий стандарт, "абстрактную виртуальную машину", которая будет проигрывать историю. Воплотить её на разных технологиях два раза: и на клиенте, и на сервере. Сказать, что конкретная реализация написана корректно, если для одной и той же истории она выдает те же результаты, что абстрактная машина из стандарта. Это чертова гора головняка, написать в точности один и тот же код на разных языках - непросто.
2) Написать симуляцию на одном и том же языке. Это означает либо отказ от браузера (и тогда писать можно на чем угодно). Либо написание на универсальном языке (или сервер на JavaScript, или клиент на WebAssembly).
3) Объединенный вариант: на универсальном языке написать интерпретатор какого-то простого скриптового DSL, единственная суть которого - переключение состояний. Тогда вместо стандарта будет готовая реализация: скрипт написан корректно, если работает на свежей версии интерпретатора DSL.
Заметки про третий вариант:
- Если сам по себе JS/V8 работает достаточно быстро (когда включается JIT), то интерпретатор, написанный на JS должен работать чудовищно медленно. Значит, остаётся только Wasm.
- Интерпретатор DSL сам по себе может быть ценностью, потому что может дать возможность делать какие-то вещи, недоступные для обычного языка. Например, обращать время для всего промежутка между сэйфпоинтами (в строго однопоточном случае с обратимыми операциями - для многопоточности нужен happens-before и это ужас).
- DSL на самом деле может быть простым подмножеством какого-то языка типа JavaScript, и тогда "прямое" выполнение может работать очень быстро - прямо на интерпретаторе первого уровня. Тормоза случатся только про ревинде, но к сожалению это должно происходить очень часто - примерно половину времени.
Выглядит сложно. Я начинаю догадываться, чем занимаются все эти игропрограммисты, не зря свой хлебушек жуют.