Описание ММО компонента в составе игрового движка «Tornado»

в 10:10, , рубрики: c++, game development, MMO, openssl, Программирование, сети

Долго искал открытый и бесплатный ММО движок в интернете. Либо это был откровенный бред, либо платный проект. Вообще, этих движков среди компаний, делающих ММО РПГ, полно, но каждая компания пишет свой движок. Единого стандарта нет. Пришлось самому его писать — и я таки сделал это. Долго продумывал интерфейс библиотеки. Потом также долго воплощал в жизнь. Потом допиливал безопасность (AES и RSA на основе OpenSSL, проблема «Man-in-the-middle» устранена). Движок получился кроссплатформенным (работа с сетью благодаря boost). Обмениваться пакетами можно как с помощью TCP, так и UDP.

В результате, по моим подсчетам, сервер вполне может держать до миллиона клиентов (все зависит от железа, чем больше, тем лучше). Это возможно благодаря кластерной организации сервера.

Итак, для клиентской стороны представлен интерфейс Client. С помощью него можно авторизоваться и потом обмениваться данными с сервером.

Описание ММО компонента в составе игрового движка «Tornado»

С сервером дела обстоят сложнее. Он состоит из трех слоев. Первый слой это – Slave. Именно с ним работает клиент после авторизации. Второй слой – Master. Через него проходит авторизация клиента. Когда клиент авторизуется, то используется IP мастера. Далее мастер направляет для соединения клиента на наименее загруженный в кластере Slave. Мастер является главой кластера и обычно с ним связана какое-то количество Slave. С помощью мастера можно объединять клиенты в группы (например, для проведения боя в одной комнате, чтобы физически это был один компьютер). Тогда мастер перераспределяет клиентов так, что бы они имели сетевое соединение с одним Slave. Происходит переброска клиентов (перекоммутация).

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

Многие скажут «а почему бы не использовать Haskell для ММО?». Во-первых, это плюсы C++ – скорость, возможность отладки. Во-вторых, изучать новый язык ради одного компонента?

Ссылки

Исходный код движка: github.com/RamilGauss/MMO-Framework
Видео-демонстрация: www.youtube.com/watch?v=g8IlYRepclE

Автор: Gauss1985

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js