В результате, по моим подсчетам, сервер вполне может держать до миллиона клиентов (все зависит от железа, чем больше, тем лучше). Это возможно благодаря кластерной организации сервера.
Итак, для клиентской стороны представлен интерфейс Client. С помощью него можно авторизоваться и потом обмениваться данными с сервером.
С сервером дела обстоят сложнее. Он состоит из трех слоев. Первый слой это – Slave. Именно с ним работает клиент после авторизации. Второй слой – Master. Через него проходит авторизация клиента. Когда клиент авторизуется, то используется IP мастера. Далее мастер направляет для соединения клиента на наименее загруженный в кластере Slave. Мастер является главой кластера и обычно с ним связана какое-то количество Slave. С помощью мастера можно объединять клиенты в группы (например, для проведения боя в одной комнате, чтобы физически это был один компьютер). Тогда мастер перераспределяет клиентов так, что бы они имели сетевое соединение с одним Slave. Происходит переброска клиентов (перекоммутация).
Если количество кластеров больше одного и между ними нужно обмениваться данными, то используется SuperServer (третий слой). Суперсервер связывает кластеры в агломерацию. Суперсервер владеет информацией обо всех клиентах агломерации и контролирует процесс авторизации (например, запрет на авторизацию на двух кластерах по одним и тем же данным авторизации клиента).
Многие скажут «а почему бы не использовать Haskell для ММО?». Во-первых, это плюсы C++ – скорость, возможность отладки. Во-вторых, изучать новый язык ради одного компонента?
Ссылки
Исходный код движка: github.com/RamilGauss/MMO-Framework
Видео-демонстрация: www.youtube.com/watch?v=g8IlYRepclE
ссылка на оригинал статьи http://habrahabr.ru/post/233915/
Добавить комментарий