ФорумПрограммированиеОбщие вопросы программирования → Архитектура игрового сервера

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

  • Padaboo

    Сообщения: 477 Репутация: N Группа: Адекваты

    Spritz Апрель 3, 2016, 8:40 д.п., спустя 1 час 7 минут 33 секунды

    Как считаете, как лучше хранить геодату:файл,mysql,nosql, в памяти (загруженные классы)?

  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Апрель 3, 2016, 11:23 д.п., спустя 2 часа 42 минуты 47 секунд

    ну и вопросы

    где хранить данные зависит от требований к ним и того, как ты с ними будешь работать.
    посмотри ещё CAP-теорему

    не всё полезно, что в swap полезло
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Апрель 3, 2016, 3:08 п.п., спустя 3 часа 45 минут 25 секунд

    ну вот хоть какие то ссылки нашел сам, это хорошо :)

    Сапожник без сапог
  • Padaboo

    Сообщения: 477 Репутация: N Группа: Адекваты

    Spritz Апрель 3, 2016, 6:13 п.п., спустя 3 часа 5 минут 21 секунду

    Посмотрел Cap теорему - целостность данных и ролл бэки с бэкапами можно организовать. А вот рэйд массив и дополнительные сервера не по карману.

  • Padaboo

    Сообщения: 477 Репутация: N Группа: Адекваты

    Spritz Апрель 8, 2016, 7:54 п.п., спустя 5 дней 1 час 40 минут

    написал небольшой ман по java книги оракл интернет Java_samples.PDF [yadi.sk]

  • Padaboo

    Сообщения: 477 Репутация: N Группа: Адекваты

    Spritz Апрель 12, 2016, 3:39 п.п., спустя 3 дня 19 часов 44 минуты

    В формете грабить корованы "Архитектура"

    Архитектура

    • Клиент
    • Сервер
    • База данных
    • Сайт

    Клиент

    • Посылает и принимате сообщения от сервера.
    • Отображает графику и объекты
    • Отображает интерфейс пользователя и диалоги

    Сервер

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

    Сайт

    • Регистраци
    • Авторизация
    • Настройки
    • Форум
    • Новостная лента
    • Медиа
    • Админка
    • Библиоткека
    • Обратная связь

    Админка

    • Управление пользователями
    • Обратная связь
    • Управление новостями
    • Управление бд

    Особенности и узкие места

    • Разделение логики:3д движок jmonkey,клиент-сервер.
    • Сущьности и модели:3д движка,игровые сущьности, сущьности базы данных.
    • Грид: для разделения на локации.
    • Шаблон Observer: Для оповещения близконаходящихся объектов.
    • Очередь сообщений: для оповещения клиентов.
    • Сбор сообщений: сбор сообщений от близко находящихся игроков.
    • Игровые вычисления: вычисление игровой механики для близко находящихся игроков и объектов
    • Отправка: рассылка общего пакета с вычислениями для близко находящихся игроков и объектов
    • Синглтон: создание единичного экземпляра объектаю
    • Фабрика: для получения типовых объектов
    • Абстракции: для определения полей и методов типовых классов.
    • Модульность: 1)гибкость подгрузки вспомогательных классов. 2) разделение на модули. 3)роутинг.
    • MVC: отделение логики базы данных, представления, и бизнес логки.
    • AI монстров: модуль управления монстрами.
    • DAO/ActiveRecord: 1) для работы с базой данных 2) ленивая загрузка
    • Балансировка и масштабируемость: запуск нескольких экземпляров приложения, возможность запуска на разных физ машинах.
    • Jar библиотеки, оптимизация.
    • Сервер авторизации.

    Игровые особеноости клиента и сервера

    • Чат (отдельный демон принимающий и передающий очереди сообщений по тикам - таймеру)
    • Инстансы (подземелья с отдельной логикой, с таймаутом посещения, физически отделены от общего игрового мира)
    • Локации - грид (hex grid coordinates) - оповещение о действиях только рядом стоящих игроков и объектов
    • БД: во время старта демона приложения делаются выборки из базы, все объекты находятся в памяти.
      во время авторизации игрока создается формирующий запрос в бд и создается объект игрока. Переодически демон сбрасывает данные обратно в бд и чистит память.
    • Гвард: проверяет целостность данных клиента, проверяет code-injection, key-press, speed-hack,map hack,drop hack, подмену пакетов.
    • Апдейтер: проверяет контрольные суммы файлов и папок, вычисляет разницу, заменяет и докачивает необходимые файлы.
    • Установщик: ставит все необходимые библиотеки,создает папку назначает права, распаковывает архив или закачивает файлы, запускает апдейтер, запускает игру.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Апрель 12, 2016, 3:53 п.п., спустя 13 минут 52 секунды

    @Padaboo, крут, а для чего это делаешь?

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Padaboo

    Сообщения: 477 Репутация: N Группа: Адекваты

    Spritz Апрель 12, 2016, 3:54 п.п., спустя 1 минуту 36 секунд

    @adw0rd, игру делаю пока в gitlab вики делаю описание текстовой и графическое сущьностей архитектуры слоев шаблонов сценариев

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Апрель 12, 2016, 4:01 п.п., спустя 7 минут

    @Padaboo, для фана или по работе?

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Padaboo

    Сообщения: 477 Репутация: N Группа: Адекваты

    Spritz Апрель 12, 2016, 4:06 п.п., спустя 4 минуты 24 секунды

    @adw0rd, звучит как "серьезно" или "на отъ*ебись". Хороший серьезный проект планирую скажем так)

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Апрель 12, 2016, 4:22 п.п., спустя 16 минут 46 секунд

    @Padaboo, понял )

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Padaboo

    Сообщения: 477 Репутация: N Группа: Адекваты

    Spritz Апрель 13, 2016, 1:55 п.п., спустя 21 час 32 минуты 36 секунд

    Как думаете иммет ли смысл шифровать пакеты например:
    * Формат пакета клиента: [time,user_id/session_id,controller_id,skill9-target]
    * Формат пакета клиента: [time,user_id/session_id,controller_id,barter-target]

    • Формат пакета сервера: [time,кому,['object1','move' => 'xyz'],['object1' => 'object2','effect32']]
  • Padaboo

    Сообщения: 477 Репутация: N Группа: Адекваты

    Spritz Апрель 13, 2016, 2:03 п.п., спустя 7 минут 36 секунд

    Всмысле сжимать или шифровать

  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Апрель 13, 2016, 2:04 п.п., спустя 1 минуту 57 секунд

    есть смысл шифровать абсолютно весь трафик каким нить rsa.

    Спустя 15 сек.

    иначе к твоей игре бот появится на следующий день :)

    Сапожник без сапог
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz Апрель 13, 2016, 2:07 п.п., спустя 2 минуты 13 секунд

    к твоей игре бот появится

    @phpdude, как будто в этом есть что-то плохое

    не всё полезно, что в swap полезло

Пожалуйста, авторизуйтесь, чтобы написать комментарий!