Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 04.08.2013, 11:15
Аватар для Murdoc
Аспирант
Отправить личное сообщение для Murdoc Посмотреть профиль Найти все сообщения от Murdoc
 
Регистрация: 04.05.2013
Сообщений: 45

да, но в таком случае нагрузка от каждого пользователя перейдет на сервер. Когда пользователей 10 это терпимо, а когда 1000 уже ощутимо.
Или это не та нагрузка о которой стоит переживать?
Ответить с цитированием
  #3 (permalink)  
Старый 04.08.2013, 15:17
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Murdoc
да, но в таком случае нагрузка от каждого пользователя перейдет на сервер. Когда пользователей 10 это терпимо, а когда 1000 уже ощутимо.
Или это не та нагрузка о которой стоит переживать?
Но если вы ее не перенесете тогда любой игрок сможет махлевать.
во тут https://developer.valvesoftware.com/..._Networking:ru описанно как работает движок в CS
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #4 (permalink)  
Старый 05.08.2013, 09:32
Аватар для Murdoc
Аспирант
Отправить личное сообщение для Murdoc Посмотреть профиль Найти все сообщения от Murdoc
 
Регистрация: 04.05.2013
Сообщений: 45

Сообщение от Дзен-трансгуманист Посмотреть сообщение
Ну если вы делаете свою стрелялку just for fun, то 1000 игроков онлайн там наберется только если очень-очень не повезет.
ну много популярных проектов появилось из just for fun)

было бы полезно перед тем как начинать что-то серьезное "прощупать почву")
Например, если вчера я отправлял на сервер команды в таком виде:
{
  w: true,
  a: false,
  s: false,
  d: false 
}


сегодня уже в таком:
['forward']



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

Сообщение от cyber Посмотреть сообщение
Но если вы ее не перенесете тогда любой игрок сможет махлевать.
во тут https://developer.valvesoftware.com/..._Networking:ru описанно как работает движок в CS
ссылка очень полезная, благодарю!
Ответить с цитированием
  #6 (permalink)  
Старый 05.08.2013, 10:17
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Murdoc,
пробывать можно, но для серьезной игры такой вариант не подойдет.
и вот еще http://habrahabr.ru/post/182678/
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.

Последний раз редактировалось cyber, 05.08.2013 в 10:24.
Ответить с цитированием
  #7 (permalink)  
Старый 05.08.2013, 12:35
Аватар для deivan
Профессор
Отправить личное сообщение для deivan Посмотреть профиль Найти все сообщения от deivan
 
Регистрация: 02.08.2012
Сообщений: 293

на клиенте - только отображение, вся игровая логика должна быть на сервере.
чтобы не париться с кроссбраузерной вебсокетностью, - взять готовое, например я успешно использую SockJS для аналогичных целей.
Ответить с цитированием
  #8 (permalink)  
Старый 05.08.2013, 21:08
Аватар для Murdoc
Аспирант
Отправить личное сообщение для Murdoc Посмотреть профиль Найти все сообщения от Murdoc
 
Регистрация: 04.05.2013
Сообщений: 45

Сообщение от cyber
и вот еще http://habrahabr.ru/post/182678/
да, я тоже сегодня на нее наткнулся, правда так и не понял зачем задержка в 75 секунд, чтоб анимация имела плавный переход и все? видимо узнаю это при тестах)

Сообщение от Дзен-трансгуманист
Использовать двоичное кодирование всегда было хорошей практикой.
думаю это лишнее)
массив из 3-х и менее команд куда понятней)

Сообщение от deivan
чтобы не париться с кроссбраузерной вебсокетностью, - взять готовое, например я успешно использую SockJS для аналогичных целей.
да, у меня для этого socket.io..
Ответить с цитированием
  #9 (permalink)  
Старый 06.08.2013, 10:13
Аватар для Murdoc
Аспирант
Отправить личное сообщение для Murdoc Посмотреть профиль Найти все сообщения от Murdoc
 
Регистрация: 04.05.2013
Сообщений: 45

Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Классная игра! Mersedes! Оффтопик 1 10.08.2012 01:12
Игра на JS. Косяк с массивом treno1 Общие вопросы Javascript 0 08.06.2011 17:13
Дам 500 руб...нужна любая игра на JS с объяснением astra_89 Работа 5 31.05.2010 08:37
Игра на яваскрипт + Бесплатные скрипты alien777 Ваши сайты и скрипты 1 05.10.2009 22:34
Игра "Висельник" SerGeO3x Общие вопросы Javascript 1 02.07.2008 18:59