Не имею опыта создания.
Игра простая: кораблик летает и стреляет. Игра мультиплеерная работает по ws
Суть любой мультиплеерной игры получать команды от пользователя, преобразовывать их в данные и отображать пользователям результат. Только вот где преобразовывать команды пользователя в данные?
Предположим, что команды пользователя(cmd) это объект с нажатыми клавишами:
{
w: true,
a: false,
s: false,
d: false
}
Набор данных(result) - координаты где находится игрок в 2D:
{
x: 200, // по x
y: 200, // по y
rotation: 90 // градусы направления
}
Как лучше распределить нагрузку, где из cmd получать result:
1
Client -> (result) ->
Server -> (results) ->
Client
2
Client -> (cmd) ->
Server -> (cmds) ->
Client
3
Client -> (cmd) ->
Server -> (results) ->
Client
Первая схема: от пользователя на сервер поступают обработанные данные. На сервере они объединяются с данными от других пользователей и раздаются обратно на клиент.
Плюсы от первой схемы:
1 Не нагружает сервер
2 Не нагружает клиент (не нужно производить вычисление данных каждого из игроков!)
Минусы:
1 На игру можно повлиять(отправить с клиента ложные данные)
Или вторая схема - команды преобразуются в данные уже после того как придут с сервера. Минус от такой схемы - с сервера приходят команды от всех игроков и нужно успеть преобразовать их в данные и отобразить визуально (и все это за менее чем 60ms)
Третья схема:
Вся нагрузка на сервер. Сервер - важное звено, он теперь передает, а также хранит и обрабатывает данные.
Минусы: при большом количестве игроков сервер может не выдержать нагрузки
Какая схема лучше или предложите свой вариант.