Что такое игровой сервер

Что такое игровой сервер

(2game || !2game) ? doGame() : playGame()

или небольшое неформальное введение в тему.

Многие современные игры немыслимы без поддержки сетевой игры. Случилось так, что даже в простейших абстрактных логических игрушках были слегка изменены с целью поддержания работы с сервером и режима сетевой игры. Даже в играх, рассчитанных на одного игрока, предоставляется возможность сохранить свои достижения в таблице рекордов на сервере. Достигается это взаимодействием самой игры и игрового сервера.

Из всего множества современных игр мы выделим и подвергнем небольшому анализу on-line игры. Если быть еще более точными, то мы с Вами разберем общие вопросы взаимодействия между однопользовательским игровым клиентом и игровым сервером. В качестве наглядного примера рассмотрим реализацию подобного общения в "симуляторе жизни" MOBL (официальная страница продукта) компании K-D LAB. MOBL представляет собой WEB приложение, в котором серверная часть реализована на JSP, а клиентом выступает апплет.

Автор, избегая приведения рецептов вида: , старался выдержать данную статью в стиле , рассматривая один из возможных вариантов решения поставленной задачи. В процессе изложения не заостряется особое внимание на вопросах конкретной реализации, однако большинство приводимых примеров потребуют от читателя некоторых знаний языка программирования Java в целом и технологии JSP, в частности.

Для начала давайте определимся с терминологией и дадим несколько общих определений для таких понятий как игровой клиент, сервер и взаимодействие с ним.

Под on-line игрой мы будем понимать небольшую (порядка нескольких сотен килобайт) игровую программу, которая загружается с WWW-сервера, и требующая наличия соединения (возможно, непостоянного) со своим игровым сервером. Понятно, что чем меньше размер нашей игры, тем лучше, так как это позволяет увеличить количество наших потенциальных игроков за счет тех пользователей, которые являются "счастливыми" обладателями достаточно медленных каналов связи. Игра может быть реализована в виде апплета (Java) или при помощи Flash (Macromedia). Никаких ограничений на жанровую принадлежность не накладывается — наша игра может быть как небольшой обычной аркадой, так и стильной мозгодробильной головоломкой. On-line игры делятся на однопользовательские (игрок может играть только самостоятельно) и многопользовательские (игрок играет совместно с другими пользователями или против других игроков). Обращаю Ваше внимание на то, что подобное разделение игр, в общем случае, никак не влияет на количество одновременно играющих пользователей на одном игровом сервере.

Игровым сервером назовём [url=#webapp]WEB-приложение[/url], которое является программной реализацией следующей функциональности:

1. первичная регистрация пользователя- игрока в системе;
2. проведение проверок регистрационных данных при подключении зарегистрированных игроков;
3. взаимодействие с игровым клиентом (в основном, обмен требуемой для игры информацией, в соответствии с заданным внутренним протоколом);
4. хранение всей необходимой для игроков и игр информации в некоторой БД и предоставление доступа к ней.

На "плечи" сервера могут быть возложены и другие задачи. Реализация сервера, понятное дело, может быть выполнена на любом известном вам языке программирования и с дополнительным применением полезных технологий и будет представлять собою набор серверных сценариев (JSP, ASP, etc.)

Загруженный с сервера экземпляр игры (либо в браузер пользователя, либо сохраненный локально в файловой системе) является клиентом по отношению к игровому серверу. При этом взаимодействием между клиентом и сервером мы называем процесс обмена сообщениями между экземпляром игры и игровым сервером в соответствии с неким внутренним протоколом. Так же как и в случае с размером игрового клиента, следует уменьшить объемы передаваемых данных между клиентом и сервером.

Приступим же к рассмотрению вопросов реализации (здесь и далее будет использоваться Java/JSP). В общем случае происходит следующее:

1. пользователь регистрируется на сервере;
2. зарегистрированный пользователь авторизуется на специальной страничке доступа к игре;
3. сервер подготавливает клиента-игру для сеанса;
4. игра, с компьютера клиента, время от времени ведет информационный обмен с сервером.

Регистрация пользователя. Проверка регистрационных данных.

Наш MOBL-сервер является обычным WEB-приложением. Было решено сделать регистрацию игроков и проверку регистрационных данных (при открытии пользователем игровой сессии) независимой от самого игрового клиента. Пользователю нужно заполнить регистрационную форму (см. Листинг 1; также см. формы HTML). Проверка корректности вводимых данных осуществляется на клиенте при помощи javascript-a. Такая же проверка осуществляется и при получении данных формы серверным сценарием регистрации. Отмечу, что приводимый в листинге код сильно упрощен и сокращен. Сделано это было для того, чтобы не загромождать изложение деталями JSP-реализации. Серверный сценарий регистрации, в случае корректности полученных регистрационных данных, осуществляет добавление нового игрока в свою базу данных. Кстати, применение СУБД и, как следствие, использование SQL для работы с информацией в БД, не только упрощает процесс разработки, но и повышает переносимость кода.

ЛИСТИНГ 1.
Регистрационная форма игрока

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

Читайте также:  Смайлики на клавиатуре компьютера скопировать

Взаимодействие клиента и сервера. Определение протокола.

Очевидно, что для нормальной работы игры одной регистрации на сервере будет недостаточно и потребуется обмен данными между клиентом и сервером.

Начав разработку WEB реализации, было бы логичным рассмотреть взаимодействие между клиентом и сервером, основываясь на применении HTTP-протокола (RFC2616). Это позволяет не задумываться о всевозможных сетевых программно-аппаратных конфигурациях, через которые могут наши пакеты. В результате мы получаем возможность играть с любой машины, на которой есть установленный и нормально настроенный для WEB-сёрфинга браузер.

Исходя из вышесказанного, получаем: (*)
· запросы от игровых клиентов обрабатываются серверными сценариями;
· вся требуемая информация передается сценариям через набор параметров. В частности, т.к. HTTP-протокол является пассивным, каждое обращение нашего игрового клиента должно передавать на сервер данные о текущем игроке;
· серверные ответы формируются в plain-тексте (в заранее определенном нами формате), и разбираются на клиенте. Сервер и клиент "знают" о требуемом формате сообщений и в каждом конкретном случае способны корректно обработать их.

MOBL-клиент является Java-апплетом, требующим для нормального функционирования игры периодического подключения к серверу для загрузки/сохранения игровой информации. Апплет должен знать о своем текущем игроке. Следовательно, сервер должен каким-то образом предоставить данную информацию апплету (желательно побеспокоиться о том, чтобы пароль не в открытом виде, в противном случае велика вероятность того, что Вам чего-то да ). К счастью, нам не нужно в данном вопросе изобретать велосипед и воспользуемся стандартным решением — передача параметров в апплет (см. Листинг 2). Кстати, использование элемента APPLET уже устарело, вместо него рекомендуется использовать элемент OBJECT.

Имеем следующее: после удачной регистрации, сервер генерирует HTML-страничку, в которой есть информация о самой игре (апплет), и данные текущего игрока, переданные в апплет в качестве параметров. Так как во время создания второй версии MOBL-а была включена поддержка русского языка (первая версия была исключительно английской), в апплет также передается информация о выбранном пользователем языке.

ЛИСТИНГ 2.
Передача регистрационных данных в апплет

Также нам на сервере нужны сценарии для взаимодействия с клиентскими апплетами, а именно:
· получение исходных данных для начала новой игры;
· сохранение на сервере результатов игры;
· загрузка игровых данных для просмотра сохраненной игры.

Реализация взаимодействия: серверная часть.

Очевидно, что реализация серверных сценариев (отвечающих за взаимодействие с игровыми клиентами) не представляет большой сложности, так как укладывается в рамки задачи разработки WEB приложений.

Кратко рассмотрим функциональность этих сценариев, на примере кода сценария создания новой игры и генерации стартовых параметров (см. Листинг 3). В начале каждый сценарий должен осуществить проверку правильности переданных ему регистрационных данных (отмечено на листинге при помощи reg-check). Если регистрационные данные корректны, сценарий начинает выполнение запрошенной функциональности, в нашем примере — простая генерация стартовых параметров для новой игры (create). Затем сценарий формирует ответ для клиента (answer). Отметим, что из-за использования HTTP, каждый ответ игрового сервера (выдаваемый обычным plain-текстом) будет дополняться со стороны WEB-контейнера стандартным HTTP-заголовком. Поэтому, для облегчения разбора серверного ответа на клиентской стороне, начало вывода серверного ответа предваряется `init`-тэгом, обозначающим место окончания HTTP-заголовка (init).

Реализация функциональности серверных сценариев для сохранения/загрузки выполняется аналогично рассмотренному выше материалу.

ЛИСТИНГ 3.
Создание новой игры и генерация стартовых параметров

Реализация взаимодействия: игровой клиент

Взаимодействие игрового клиента с сервером, в нашем случае, можно разделить на несколько небольших задач:

1. перед началом любой игры нужно попросить сервер сгенерировать нам стартовые параметры игры;
2. в случае удачного окончания игры, её конфигурация передается на сервер для сохранения;
3. игровой клиент также должен уметь загружать с сервера сохраненные игры (страница "лучшие игры").

Определимся же с тем, КАК мы будет общаться с игровым сервером. Исходя из спецификации Java Security (для желающих — небольшой FAQ), следует, что мы можем установить соединение из апплета только с тем сервером, с которого был вытянут этот самый апплет. Будем использовать JDK 1.х, потому как в браузерах по умолчанию поддерживается именно она, поддержка же более свежих версий появляется после установки дополнительных плагинов. В пакете java.net есть всё, что нам может понадобиться для связи с сервером, а именно: достаточно полезный класс URL, с не менее полезным методом openConnection(). На основании этого класса сделаем свою небольшую обертку для HTTP-соединения (см. Листинг 4).

Конечно же, можно было бы сделать и собственную реализацию работы с сервером через класс Socket, но это порождает дополнительные проблемы.

ЛИСТИНГ 4.
Класс-обертка для установления соединения с определенным хостом,
передачи параметров методом POST и получением результирующего потока-ответа

Оставшаяся работа — сущие пустяки. Продемонстрируем это на примере загрузки с сервера начальных параметров для новой игры (см. Листинг 5). Для начала нам нужно сформировать строку адреса, для подключения к соответствующему серверному сценарию (address). Метод getCodeBase() возвращает реальный базовый путь к апплету, что позволяет нам не задумываться над сохранением адреса сервера в игровом апплете. Нам важно лишь знать имя и параметры нужного нам server-side script (хранится в константах класса AppSettings, в частности, skstrScriptInitURL — имя сценария для создания новой игры на сервере и получения её стартовых параметров). После этого воспользуемся функциональностью класса из Листинга 4 и пошлем запрос серверу и пробуем получить поток с ответом сервера.

Читайте также:  Эксперимент офис the belko experiment

Если ошибок в предыдущих наших действиях не было, начнем получать ответ (receive). Сразу после этого проведем отсечение ненужного нам HTTP-заголовка (skip-header), а заодно и проверку полученного ответа (checks), в соответствии с определенными до этого протоколом и допустимыми ответами со стороны сервера.

Дальнейшее же действо — простая загрузка полученных данных и инициализация внутренних переменных игрового энжина (loading).

ЛИСТИНГ 5.
Загрузка с сервера начальных параметров для новой игры

Из вышесказанного видно, что проектирование протокола взаимодействия между клиентом и сервером, а также соответствующая реализация, не является очень сложным занятием. Резюмируя, повторю основные идеи, изложенные в статье:
· выделите задачи, функциональность которых будет реализована в рамках разрабатываемого сервера; определитесь с нужными клиенту данными для работы с сервером;
· определите протокол взаимодействия между клиентом и сервером как минимально необходимое множество сообщений и ответов на них, а также формат сообщений (используйте для этого информацию, полученную в результате выполнения предыдущего пункта);
· проведите анализ доступных технологий, которые могут быть использованы (не обязательно в полной мере) в проекте. Начинайте разрабатывать что-либо своё "с нуля" только в том случае, если Вы действительно не можете воспользоваться уже существующими разработками;
· приступайте к реализации 🙂 Будьте бдительны — велика вероятность того, что Вы не смогли с самого начала предусмотреть и учесть все возможные нюансы Вашего проекта. Помните, что чем раньше Вы начнете вносить изменения в систему, а не ставить временные закладки, надеясь на будущий "авось!", — тем лучше!

PS:
Конечно же, в рамках данной статьи, можно было более подробно рассмотреть много других тем. Например, такой аспект разработки игр как "запись демок", или, говоря другими словами, ведение подробного журнала событий игры, в котором сохраняются все действия игрока, а также независящие изменения игровой вселенной.

Но это уже совсем другая история.

Чтобы не повторяться, просто приведу эту ссылку, для интересующихся историей MOBL-а. Здесь же я просто сообщу несколько фактов:

· первоначальная реализация была сделана на С++;
· первая on-line версия была сделана на Java (игровой апплет) и C++ (CGI-scripts, Win32 platform);
· текущая (вторая по счету) версия является полностью переписанной первой версией, портированной на Java. В частности, сервер был реализован на JSP. Также, во время портирования, были сделаны многие дополнительные изменения и улучшения.

Java Server Pages (JSP) — независимая от платформы технология, предлагаемая в SUN’s J2EE. Альтернативная методика разработки приложений, динамически генерирующих ответ по запросам клиента

Login — информация, используемая для однозначной идентификации пользователей системы. Состоит из двух элементов, собственно, логина — уникального имени пользователя и пароля.

SQL — структурированный язык запросов. Используется для работы с БД

WEB-контейнер — программная среда, обеспечивающая поддержку полного жизненного цикла WEB-приложений и их компонент.

WEB-приложение — приложение, построенное для работы в сети Internet. Представляет собой набор взаимосвязанных скриптов (сценариев), работающих под управлением WEB-контейнера.

База данных (БД) — множество взаимосвязанной структурированной информации. Так, в роли БД, может выступать и набор текстовых файлов, хранящих нужную информацию)

Протокол — набор правил, строго регламентирующих порядок обмена информацией между заинтересованными сторонами.

Серверный сценарий (скрипт, страница) — набор инструкций для обработки получаемого запроса с целью генерации ответа.

СУБД — Система Управления Базами Данных. Например, Oracle.

В случае если вы очень любите играть в различные онлайн игры, то вы наверное не раз думали о том, кому именно это выгодно. Если же не задумывались, то теперь точно задумаетесь.

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

Что же такое игровой хостинг

Если термин «хостинг» вам уже знаком, то вы знаете, что это сервер, либо место на сервере хостинг провайдера, которое мы покупаем или арендуем. Для работы любого веб-сайта нужен современный и надежныйхостинг игровых серверов, который отвечает всем сегодняшним стандартам качества.

Тем не менее, хороший украинский хостинг и игровой хостинг – не одно и то же. В настоящее время не всякий хостинг, даже очень хороший, нормально подходит под игровой сервер. Это связано с тем, что для игрового сервера нужно довольно мощное оборудование и высокая проходимость трафика.

Читайте также:  Лучший объектив для sony alpha

Не все хостеры предоставляют в аренду специальный сервер для игр. Однако даже те, которые предоставляют подобную услугу, должны быть обязательно подвергнуты вами тщательной проверке.

Кому необходим игровой хостинг

Игровой хостинг в европе необходим, в первую очередь, всем тем, собирается зарабатывать на различных услугах, оказываемых остальным пользователям. Для выполнения данной задачи есть два пути.

  • Первый – это установить на компьютер специальное ПО, настроить его и подключить к интернету. Пользователи, которые захотят играть на базе вашего сервера, должны также на своем компьютере установить ПО и через ваш IP зайти на игровой сервер, начать игру. Выполнение данной задачи требует довольно больших материальных затрат. Простой домашний ПК для этого не подойдет, тем более, если число игроков с каждым днем будет увеличиваться.
  • Второй – это аренда игрового сервера. Такая аренда происходит по такой же схеме, что и обычная аренда сервера. Вы заключаете соглашение аренды с хостинг провайдером и на арендованном сервере размещаете свое ПО, начинаете администрирование игры. За специальную плату вы позволяете вашим клиентам полноценно подключаться к вашему серверу для игры. Аренда игрового сервера от вас потребует более тщательного и внимательного подхода к выбору хостинг провайдера. Какие параметры следует оценить перед тем как арендовать игровой сервер?

Как выбрать хостинг игровых серверов

Малый уровень пинга

Пинг – время соединения с сервером, а также его ответ на какое-то ваше действие в интернете. То есть в случае если пинг большой, время ответа сервера к клиенту повышается.

Топ 5 хостингов нашего рейтинга

рейтинг хостинга


Достоинства:
надежная компания, быстрый хостинг , широкий спектр услуг


рейтинг хостинга


Достоинства:
современный и надежный хостинг, доступные цены

рейтинг хостинга


Достоинства:
легкие в настройке и управлении сервера с идеальным сочетанием цены, производительности и надежности

рейтинг хостинга


Достоинства:

Отличная панель управления, низкие цены, грамотная техподдержка

рейтинг хостинга

Достоинства: Быстрый, по-европейски надежный хостинг

Игровой сервер (англ. game server от англ. game — игра и англ. to serve — служить) — программный компонент вычислительной системы, обеспечивающий связь между различными клиентами, предоставляя им возможность коммуникации друг с другом в рамках программной

Содержание статьи:

Игровой сервер (англ. game server от англ. game — игра и англ. to serve — служить) — программный компонент вычислительной системы, обеспечивающий связь между различными клиентами, предоставляя им возможность коммуникации друг с другом в рамках программной оболочки конкретной игры.

Онлайн-игры

Самыми часто встречающимися онлайн-играми являются Dota (Defense of the Ancients) World of Warcraft , Counter-Strike (в том числе Counter-Strike Source ), Lineage , Lineage II , Call of Duty , Team Fortress , Quake , Unreal Tournament , San Andreas Multiplayer (сокр. SA-MP ) и другие.

Также, существует множество серверов , поддерживающих различные интеллектуальные игры: шахматы , го , сёги , маджонг и другие.

В работе игрового сервера можно выделить 4 основных механизма:

Связь с клиентом

Получение данных о клиенте, в том числе расположение на виртуальной карте мира (в рамках игрового сервера карта может быть любой), о боезапасе, здоровье, направлении движения и действиях клиента. Все перечисленные данные относятся только к виртуальному игровому миру и не имеют никакого отношения к реальному игроку, находящемся за ПК .

Синхронизация полученных данных

Игровой сервер постоянно производит обновление игрового мира. Данные об изменениях отправляются всем клиентам, естественно между сервером и клиентом возникает задержка измеряемая в миллисекундах .

Отправка данных клиенту

Отправка всех данных после систематизации общей картины игрового мира каждому игроку игрового сервера. Количество данных, которое получит каждый игрок, зависит от значения параметра rate у сервера и у каждого клиента в отдельности. При этом rate клиента не может превышать rate сервера, но не наоборот.

Административная панель

На игровых серверах имеются администраторы . Такие игры, как SA-MP и Counter Strike используют систему Rcon . Главный администратор имеет доступ ко всему игровому миру (на сервере) и может изменять параметры игры. Также многие владельцы серверов арендуют административные права в игре, но эти права не могут превышать права главного администратора. Однако у администраторов тоже есть функции управления игрой, например:

  • Kick — принудительное выкидывание игрока с сервера,
  • Warn — оповещение/предупреждение игрока о нарушении правил поведения на сервере,
  • Time Ban — запрет игроку определенное время играть на сервере,
  • Ban — запрет входа навсегда,
  • UnBan — отмена бана,
  • Freeze — «заморозить» (обездвижить) игрока,
  • UnFreeze — «разморозить» игрока,
  • Weather Set — изменение погоды на сервере,
  • Time Set — изменение времени в игре,
  • ClearChat — очистить чат.

Global Play

Игровые серверы не поделены по региональному признаку. Таким образом игрок с американским или российским аккаунтом может играть на сервере любого региона мира.

Ссылка на основную публикацию
Что такое django python
Django Тип каркас веб-приложений Автор РазработчикDjango Software FoundationНаписана наPython[2]Интерфейсвеб-интерфейсОперационная системакроссплатформенностьПервый выпуск2005[1]Последняя версия 3.0.4 ( 4 марта2020 ) [3] Лицензиямодифицированная лицензия...
Чем чистить датчик абсолютного давления
ВСЁ СВОИМИ РУКАМИ 12.06.2018 . . После покупки Шевроле Лачетти оказалось, что эта первая моя машина, на которой был установлен...
Чем хорош увлажнитель воздуха отзывы
у нас на работе стоял, попеременно двигали каждый к себе поближе, ибо да, с ним как-то лучше, мне лично глазам...
Что такое hangouts и для чего
Хэкгаутс что это за программа на телефоне Добрый день, друзья. Для смартфонов на разных платформах существуют тысячи программ. Сейчас мы...
Adblock detector