.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Сетевая часть ММО игр
Что такое Realm?
В моём понятии это сервер, что имеет свою DB и свою независимую игровую логику.
Это в случае если предусматриваются разные сервера, для разделения игроков, возможно по режимам игры (PvP/PvE или т.п.), также они естественно могут иметь разные настройки, и возраст, который будет определять уже общий коэфицент развития игроков в игровом мире.
Получается нужно иметь отдельный сервер, что будет иметь DB всех учётных записей, также этот сервер будет отображать статус realm'ов, и т.п.
Когда user заходит в Launcher, он логиниться под его учётной записью, затем ему выдаётся список серверов, и их статусы.
Он выбирает realm на который заходить, на этом моменте он устанавливает соединение с выбранным сервером, и далее уже получает список персонажей.
При выборе персонажа, идёт уже загрузка в мир, исходя из локации, и т.п.
По сути, первый сервер, имеет ответственность за авторизацию игровой копии (если такое предусматривается), а также аутентификацию учётной записи.
Также, при соблюдении всех проверок, и выборе реалма, должен создаваться временный ключь сессии, на этом же сервере. Который будет запрошен и сверен с предоставленным от клиента. То есть: при выборе realm'а, на сервере учёток создаётся уникальный ключик (хашь хрени всякой), шлётся пользователю, пользователь с этим ключём посылает запрос на realm, который в свою очередь ищет по этому ключику сессию на учётном сервере, находит, и таким образом, он знает уже какой пользователь (учётка), и т.п. соединяется. Этот ключик сессии, должен быть деактивирован каждый раз при дисконнекте, и он же будет участвовать в проверке попытки зайти два раза тем же персонажем, и для логов.
Учётный сервер, сильно отличается от игрового.
Игровой сервер уже будет осуществлять всю игровую логику.
Далее, технически, нужно иметь статус состояния клиента на сервере, исходя из которого, будут ожидаться те или иные пакеты с данными. Так сказать, инкапсулировать логику на приём пакетов, которые не должны ожидаться.
Учти, что внезапный обрыв клиента, должен быть ожидаемым в любой момент, и с этим придётся считаться, чтобы "замести" все следы недоделанных работ.
Работа с БД, должна также быть весьма отделённой от игровой логики. Почти вся игровая логика должна быть завязана на данных в ОЗУ, а менеджер загрузки данных, должен грузить и выгружать чётко что нада а что нет.
Тут будет много парки с утечкой памяти.
Также, учитывай, что сервер может вдруг упасть, все данные, будут потеряны (те что в ОЗУ), и с этим нужно тоже считаться..
|