антиКИЛЛЕР
Well-Known Member
- Регистрация
- 28.07.2011
- Сообщения
- 92
Сейчас я чисто для себя разрабатываю игру для соц. сетей (проект сейчас находится на стадии проработки функционала, игровой механики и архитектуры).
Я понимаю, что любая многопользовательская игра это высоконагруженный проект и ужно максимально минимизировать нагрузку на сервер.
Поиграв во многие игры, я заметил, что зачастую игры содержат излишнюю интерактивность (т.е. при каждом действии игрока обновляется игровая ситуация, даже в тех случаях, когда этого можно не делать, а подождать пока игрок выполнит все нужные ему действия).
Логично, что при этом, чем реже обновляется игровая ситуация, тем лучше для сервера. Но в любом случае будут действия, когда обновление игровой ситуации нужно сразуже. Обычно это происходит таким образом:
При этом, у меня в частности, будет целый ряд ситуаций, когда результат вполне предсказуем и обсчитать его можно в браузере.
А именно игрок будет выполнять много мелких однообразных дествий, для выполнения которых ему нужно лишь нажать на нужные кнопки столько раз, сколько необходимо. (за секунду может нажать на 5 кнопок - 5 кнопок, 5 действий)
При этом я планрую делать так:
Всё казалось бы хорошо. Но проблема может наступить, в случае если запрос на сервере будет выполняться очень долго. Например запускает пользователь несколько запросов и ява скрипт выдал ему новую игровую ситуацию (при этом она есть только у клиента, сервер её ещё не просчитал и не занёс в БД). И тут пользователь принудительно обновляет страницу и видит старые данные, а не новые. И тут у игрока начинается паника, сотни ненависти и т.д., т.к. он всё сделал, у него должно быть по новому, а у него по старому (хотя у него всё будет, просто ещё запрос не упел выполнится).
Как этого можно избежать? Вообще интересно мнение более опытных людей, насколько моя концепция будет жизнеспособна и насколько она будет экономить ресурсы. И раз уж я решил передавать данные пакетами, т.е. собирать кучку и отправлять, то как избежать ситуации, когда пользователь сделал несколько действий, пакет данных сформировался, но не был отправлен, а пользователь ушёл со страницы.
У кого какие мысли по этому поводу?
Я понимаю, что любая многопользовательская игра это высоконагруженный проект и ужно максимально минимизировать нагрузку на сервер.
Поиграв во многие игры, я заметил, что зачастую игры содержат излишнюю интерактивность (т.е. при каждом действии игрока обновляется игровая ситуация, даже в тех случаях, когда этого можно не делать, а подождать пока игрок выполнит все нужные ему действия).
Логично, что при этом, чем реже обновляется игровая ситуация, тем лучше для сервера. Но в любом случае будут действия, когда обновление игровой ситуации нужно сразуже. Обычно это происходит таким образом:
- игрок выполняет действие
- идёт аякс запрос с передачей параметра действия
- сервер всё обрабатывает и возвращает результат
- ява скрипт обновляет страницу и игровую ситуацию
При этом, у меня в частности, будет целый ряд ситуаций, когда результат вполне предсказуем и обсчитать его можно в браузере.
А именно игрок будет выполнять много мелких однообразных дествий, для выполнения которых ему нужно лишь нажать на нужные кнопки столько раз, сколько необходимо. (за секунду может нажать на 5 кнопок - 5 кнопок, 5 действий)
При этом я планрую делать так:
- игрок выполняет действияе.
- ява скрипт обсчитывает и обновляет игровую ситуацию (предварительно).
- ява скрипт собирает пачку данных и с определённой степенью периодичности посылает аякс-запрос действий.
- игрок может совершать любые действия, независимо от того выполнился его предыдущий запрос или ещё выполняется.
- если всё было выполнено на сервере хорошо, то ничего не происхожит, а если ошибка, то тогда уже возвращаются данные обновлённой игроковой ситуации и пользователю сообщается об ошибке.
Всё казалось бы хорошо. Но проблема может наступить, в случае если запрос на сервере будет выполняться очень долго. Например запускает пользователь несколько запросов и ява скрипт выдал ему новую игровую ситуацию (при этом она есть только у клиента, сервер её ещё не просчитал и не занёс в БД). И тут пользователь принудительно обновляет страницу и видит старые данные, а не новые. И тут у игрока начинается паника, сотни ненависти и т.д., т.к. он всё сделал, у него должно быть по новому, а у него по старому (хотя у него всё будет, просто ещё запрос не упел выполнится).
Как этого можно избежать? Вообще интересно мнение более опытных людей, насколько моя концепция будет жизнеспособна и насколько она будет экономить ресурсы. И раз уж я решил передавать данные пакетами, т.е. собирать кучку и отправлять, то как избежать ситуации, когда пользователь сделал несколько действий, пакет данных сформировался, но не был отправлен, а пользователь ушёл со страницы.
У кого какие мысли по этому поводу?