Браузерная игра
Не имею опыта создания.
Игра простая: кораблик летает и стреляет. Игра мультиплеерная работает по 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) Третья схема: Вся нагрузка на сервер. Сервер - важное звено, он теперь передает, а также хранит и обрабатывает данные. Минусы: при большом количестве игроков сервер может не выдержать нагрузки Какая схема лучше или предложите свой вариант. |
да, но в таком случае нагрузка от каждого пользователя перейдет на сервер. Когда пользователей 10 это терпимо, а когда 1000 уже ощутимо.
Или это не та нагрузка о которой стоит переживать? |
Цитата:
во тут https://developer.valvesoftware.com/..._Networking:ru описанно как работает движок в CS |
Цитата:
было бы полезно перед тем как начинать что-то серьезное "прощупать почву") Например, если вчера я отправлял на сервер команды в таком виде: { w: true, a: false, s: false, d: false } сегодня уже в таком: ['forward'] :) |
Цитата:
|
Murdoc,
пробывать можно, но для серьезной игры такой вариант не подойдет. и вот еще http://habrahabr.ru/post/182678/ |
на клиенте - только отображение, вся игровая логика должна быть на сервере.
чтобы не париться с кроссбраузерной вебсокетностью, - взять готовое, например я успешно использую SockJS для аналогичных целей. |
Цитата:
Цитата:
массив из 3-х и менее команд куда понятней) Цитата:
|
:)
|
Часовой пояс GMT +3, время: 20:41. |