Добрый день. В целях обучения хочу разобраться, как должен работать авторитетный игровой сервер и в каких случаях он вообще нужен. Игра для обучения примитивна: космос, корабли. Они могут летать и стрелять друг в друга. К данному моменту многое загуглено и прочитано, однако все равно остаются вопросы:
- Какими способами можно обеспечить одинаковый (хотя бы приблизительно) пинг для всех клиентов?
- Как сервер должен обрабатывать стрельбу одного корабля в другого? Конкретно интересует, должен ли сервер в момент выстрела игрока А уже знать о том, убит ли игрок Б и послать ему соответственное сообщение, чтобы отрисовать уменьшение здоровья? Или он (сервер) должен узнать об этом лишь тогда, когда игрок Б отправит событие "по мне попали" и затем проверить, был ли произведен по нему выстрел и послать на клиент (игроку Б) результат "пальбы"?
- Как организовать синхронизацию действий ИИ между клиентами? Кто (сервер или один из клиентов или кто-то еще) должен регулировать действия ИИ и оповещать об этом остальных клиентов?
- Как проектируют моментальную синхронизацию и обработку действий между клиентами? Например в MOBA играх все происходит довольно быстро и порой бывает так, что необходимо синхронизировать какое-то действие, которое происходит за пол секунды, а то и меньше (например кто-то подпрыгнул, а его заморозили). Какие протоколы передачи данных используют в данном случае и какой порядок действий должен быть в общении между клиентами и сервером?
Просьба по возможности дать развернутые ответы, либо ссылки на ресурсы, касающиеся конкретно приведенных вопросов. Повторюсь, что я уже довольно много почитал как англо-, так и русскоязычных ресурсов, но какая-то каша и недопонимание все равно присутствуют.
Может, среди пользователей есть терпеливые люди, кто готов помочь с объяснениями за рамками тостера? Оставляйте контакы, если есть возможность пообщаться.
Спасибо!