Я так понял, что лучшая архитектура для игры та, в которой сервер главный, двигает игроков, пули и все считает. Но что, если элементов игры много, каждый надо подвинуть, что-то посчитать в зависимости от их положения друг относительно друга? Например есть что-то такое на сервере:
setTimeout(function() {
//все просчитываем, двигаем, посылаем
}, 30);
Можно как-то улучшить, оптимизировать это? Например что-то считать и двигать на клиенте и посылать на сервер только при создании каких-то элеметов, тех же пуль например, но чтобы при этом все было синхронно на клиентах и сервере, чтобы не было, ситуаций, когда на сервере что-то уже случилось, взорвалось, а на клиенте пули, гранаты, какие-то элементы еще даже не долетели.
Уточню
На каждого игрока имеется в среднем по 20 пуль, которые летят по прямой и их координаты надо просчитывать, для чего и setTimeout, который каждый момент времени двигает в направлении их движения(и считает координаты игроков). Собственно и проблема в рассинхронизации координат, т.к. на данном этапе считаются координаты и на сервере и на клиенте, но они не обмениваются, синхронизируется только счет при попадании по противнику.
Хотелось бы синхронизировать координаты, вижу такие варианты:
- Посылать пули кучей вместе с координатами игроков
- Сохранить текущую архитектуру и синхронизировать координаты пуль каждые 60мск допустим
- Посчитать задержку между сервером и клиентом и добавить разницу к фпс в setTimeout