GameDev - нужен совет по клиент-серверному взаимодействию

Статус
Закрыто для дальнейших ответов.

антиКИЛЛЕР

Well-Known Member
Регистрация
28.07.2011
Сообщения
92
Сейчас я чисто для себя разрабатываю игру для соц. сетей (проект сейчас находится на стадии проработки функционала, игровой механики и архитектуры).
Я понимаю, что любая многопользовательская игра это высоконагруженный проект и ужно максимально минимизировать нагрузку на сервер.
Поиграв во многие игры, я заметил, что зачастую игры содержат излишнюю интерактивность (т.е. при каждом действии игрока обновляется игровая ситуация, даже в тех случаях, когда этого можно не делать, а подождать пока игрок выполнит все нужные ему действия).
Логично, что при этом, чем реже обновляется игровая ситуация, тем лучше для сервера. Но в любом случае будут действия, когда обновление игровой ситуации нужно сразуже. Обычно это происходит таким образом:
  1. игрок выполняет действие
  2. идёт аякс запрос с передачей параметра действия
  3. сервер всё обрабатывает и возвращает результат
  4. ява скрипт обновляет страницу и игровую ситуацию
При этом часто до тех пор, пока аякс запрос не вернёт результат, игра блокируется, т.е. игрок не может выполнять никаких действий. Это очень раздражает игровов (знаю по своему опыту). Некоторые игроки из-за этого открываеют в барузере несколько вкладок с игрой и делают эти действия на каждой из них по очереди, тем самым увеличивая количество запросов в единицу времени, а => и нагрузку на сервер.

При этом, у меня в частности, будет целый ряд ситуаций, когда результат вполне предсказуем и обсчитать его можно в браузере.
А именно игрок будет выполнять много мелких однообразных дествий, для выполнения которых ему нужно лишь нажать на нужные кнопки столько раз, сколько необходимо. (за секунду может нажать на 5 кнопок - 5 кнопок, 5 действий)
При этом я планрую делать так:
  1. игрок выполняет действияе.
  2. ява скрипт обсчитывает и обновляет игровую ситуацию (предварительно).
  3. ява скрипт собирает пачку данных и с определённой степенью периодичности посылает аякс-запрос действий.
  4. игрок может совершать любые действия, независимо от того выполнился его предыдущий запрос или ещё выполняется.
  5. если всё было выполнено на сервере хорошо, то ничего не происхожит, а если ошибка, то тогда уже возвращаются данные обновлённой игроковой ситуации и пользователю сообщается об ошибке.

Всё казалось бы хорошо. Но проблема может наступить, в случае если запрос на сервере будет выполняться очень долго. Например запускает пользователь несколько запросов и ява скрипт выдал ему новую игровую ситуацию (при этом она есть только у клиента, сервер её ещё не просчитал и не занёс в БД). И тут пользователь принудительно обновляет страницу и видит старые данные, а не новые. И тут у игрока начинается паника, сотни ненависти и т.д., т.к. он всё сделал, у него должно быть по новому, а у него по старому (хотя у него всё будет, просто ещё запрос не упел выполнится).

Как этого можно избежать? Вообще интересно мнение более опытных людей, насколько моя концепция будет жизнеспособна и насколько она будет экономить ресурсы. И раз уж я решил передавать данные пакетами, т.е. собирать кучку и отправлять, то как избежать ситуации, когда пользователь сделал несколько действий, пакет данных сформировался, но не был отправлен, а пользователь ушёл со страницы.

У кого какие мысли по этому поводу?
 
Статус
Закрыто для дальнейших ответов.
Верх Низ