Jump to content

Архитектура серверов


Go-piratia

Recommended Posts

 

image.png

 


Игровой клиент (Client) - приложение с которым взаимодействует конечный пользователь (игрок). Визуализирует состояние игрового мира вокруг персонажа игрока, полученное от сервера через сеть Интернет. Под визуализацией понимается отрисовка игровой карты с объектами на ней (например, суша и море, деревья, здания, дороги), персонажей других игроков, монстров, неигровых персонажей (NPC)  и так далее - всего того, что на своем мониторе видит игрок в процессе игры. Кроме визуализации клиент посредством графического интерфейса пользователя (GUI) предоставляет последнему возможность влиять на состояние игрового мира и процесс игры с помощью клавиатуры и мыши, отправляя на сервер различные действия, например, создание персонажа, перемещение персонажа в игровом мире, атака монстров, взаимодействие с NPC, отправка сообщений в чат и другие действия, которые разрешены на сервере правилами игры. Для пользователя клиент является игрой в обычном понимании. В рассматриваемой системе игровых клиентов может быть от 1 до нескольких тысяч. Подключается через 1973 порт к GateServer.

GateServer - принимает входящие соединения через 1973 порт от игровых клиентов и выступает в роли шлюза, через который игровой клиент взаимодействует с GroupServer, AccountServer и GameServer. Является сервером на 1971 порту по отношению к GameServer и клиентом на 1975 порту по отношению к GroupServer. Для распределения нагрузки в системе может быть несколько GateServer. Например, можно настроить сервер таким образом, что игроки из России подключаются к GateServer, который расположен в Москве, а игроки из Европы подключается к GateServer, который запущен на хостинге в дата-центре, расположенном в Германии, что позволит снизить задержки (пинг) при передаче сетевых пакетов от клиента на сервер и обратно. В целях безопасности игрового процесса GateServer шифрует весь сетевой трафик, который передается между сервером и клиентами.

GroupServer - отвечает за создание и удаление персонажей с аккаунта пользователя, систему друзей и отрядов, общение между игроками в чатах (мировой, торговый, отряд, гильдия, ЛС) и диалогах. GroupServer также участвует в процессе аутентификации игроков на сервере, передавая пакеты аутентификации, полученные от GateServer, далее в AccountServer. Является сервером на 1975 порту по отношению GateServer и клиентом по отношению к AccountServer на 1978 порту. Кроме того, подключается в роли клиента через 1433 порт к Microsoft SQL Server для работы с базой данных GameDB. Как и в случае с GateServer, в системе может быть несколько GroupServer для распределения нагрузки, но, как правило, в реальных проектах используется один экземпляр GroupServer.

AccountServer - нужен для аутентификации игроков на сервере путем сравнения полученных от пользователя логина и пароля с соответствующими логином и паролем в базе данных. Если игрок ввел верные логин и пароль, то он допускается к игре на сервере, в противном случае получает сообщение об ошибке авторизации и отключается от сервера. Является сервером по отношению к GroupServer на порту 1978. Работает с базой данных AccountServer, поэтому является клиентом Microsoft SQL Server на порту 1433. Как и в случае с GateServer, в системе может быть несколько AccountServer для распределения нагрузки, но обычно в реальных проектах используется один экземпляр AccountServer.


GameServer - основной игровой сервер, где осуществляется вся логика игры. Обеспечивает игровой процесс и синхронизацию состояния игрового мира с игровыми клиентами: является клиентом на 1971 порту по отношению к GateServer, через который принимает действия от игровых клиентов, проверяет их корректность, и, в случае соблюдения установленных правил игры, вносит изменения в состояние игрового мира, после чего оповещает об этом все остальные игровые клиенты. Параллельно с обработкой действий игровых клиентов, с определенной частотой (обычно 20 Гц) обновляет игровой мир, например, для создания погодных явлений или управления монстрами с помощью искусственного интеллекта (AI). Для сохранения состояния игрового мира использует базу данных GameDB и является клиентом Microsoft SQL Server на порту 1433. GameServer является самым высоконагруженным элементом в системе и потребляет больше всего вычислительных ресурсов и памяти, поэтому в реальных проектах нагрузка распределяется между от 3 до 5 GameServer.

 

Следует отметить, что рассмотренная архитектура является самой распространенной и применяется в большинстве проектов, но Вы можете перестраивать её под свои нужды:

  • Вы можете изменить стандартные порты 14331971197319751978 на любые другие не зарезервированные порты изменяя *.cfg файлы серверов;
  • Вы можете переименовывать базы данных AccountServer и GameDB (потребуется редактирование некоторых исполняемых файлов сервера);
  • Вы можете запускать несколько экземпляров Microsoft SQL ServerGateServerGroupServerAccountServerGameServer и настраивать взаимосвязи между ними в целях распределения нагрузки и повышения производительности игрового процесса;
  • В систему могут быть добавлены новые элементы, например, сервер встроенного в клиент магазина игровых предметов (IGS), сервер для фильтрации исходящих от клиентов пакетов (FilterServer), сервер "оффлайн" ларьков (StallServer), который позволяет игрокам торговать в ларьках не находясь в игре.
    Пример перечисленных архитектур:
    StallServer или FilterServer
    image.png

    TradeServer и StallServer
     

image.png

 

 

Материалы частично взяты с pkodev.net

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Chat

Chat

Please enter your display name

×
×
  • Create New...