Показать сообщение отдельно
  #1 (permalink)  
Старый 03.08.2013, 20:35
Аватар для Murdoc
Аспирант
Отправить личное сообщение для Murdoc Посмотреть профиль Найти все сообщения от Murdoc
 
Регистрация: 04.05.2013
Сообщений: 45

Браузерная игра
Не имею опыта создания.
Игра простая: кораблик летает и стреляет. Игра мультиплеерная работает по 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)

Третья схема:
Вся нагрузка на сервер. Сервер - важное звено, он теперь передает, а также хранит и обрабатывает данные.
Минусы: при большом количестве игроков сервер может не выдержать нагрузки

Какая схема лучше или предложите свой вариант.

Последний раз редактировалось Murdoc, 03.08.2013 в 21:00.
Ответить с цитированием