Довго шукав відкритий і безкоштовний ММО движок в інтернеті. Або це була відверта маячня, або платний проект. Взагалі, цих движків серед компаній, що роблять ММО РПГ, повно, але кожна компанія пише свій движок. Єдиного стандарту немає. Довелося самому його писати - і я таки зробив це. Довго продумував інтерфейс бібліотеки. Потім також довго втілював у життя. Потім допилював безпеку (AES і RSA на основі OpenSSL, проблема «Man-in-the-middle» усунена). Движок вийшов кроссплатформним (робота з мережею завдяки boost). Можна обмінюватися пакетами як за допомогою TCP, так і UDP.
В результаті, за моїми підрахунками, сервер цілком може тримати до мільйона клієнтів (все залежить від заліза, чим більше, тим краще). Це можливо завдяки кластерній організації сервера.
Отже, для клієнтської сторони представлений інтерфейс Client. За допомогою нього можна авторизуватися і потім обмінюватися даними з сервером.
З сервером справи йдуть складніше. Він складається з трьох шарів. Перший шар це - Slave. Саме з ним працює клієнт після авторизації. Другий шар - Master. Через нього проходить авторизація клієнта. Коли клієнт авторизується, то використовується IP майстра. Далі майстер направляє для з'єднання клієнта на найменш завантажений в кластері Slave. Майстер є главою кластера і зазвичай з ним пов'язана якась кількість Slave. За допомогою майстра можна об'єднувати клієнти в групи (наприклад, для проведення бою в одній кімнаті, щоб фізично це був один комп'ютер). Тоді майстер перерозподіляє клієнтів так, що б вони мали мережеве з'єднання з одним Slave. Відбувається перекидання клієнтів (перекомутація).
Якщо кількість кластерів більше одного і між ними потрібно обмінюватися даними, то використовується SuperServer (третій шар). Суперсервер пов'язує кластери в агломерацію. Суперсервер володіє інформацією про всіх клієнтів агломерації і контролює процес авторизації (наприклад, заборону на авторизацію на двох кластерах за одними і тими ж даними авторизації клієнта).
Особливості реалізації.
В основі лежить ідея сценаріїв. Існує сценарій (чиста логіка) і контекст сценарію.
Скрипт - це послідовність дій (надсилання пакунків і реакція на отримання), які здійснюються над контекстом.
Сесія (мережеве з «єднання) пов» язана з набором контекстів, кожен з яких призначено для свого скрипту (наприклад, обмін даними та авторизація).
Але коли йде відпрацювання одного з них - інші повинні блокуватися. Тобто робота по сесії ведеться завжди тільки за одним сценарієм.
Наприклад, у Майстра багато сесій з нижчими Slave. По кожній сесії відпрацьовує свій сценарій.
Сценарію просто підсовують пакет і він шукає контекст, який з ним пов'язаний (або за ID_Session, або за ключем, який передано всередині пакета).
Далі відбуваються якісь свої дії за сценарієм.
Посилання
Початковий код рушія: github.com/RamilGauss/MMO-Framework
Відео-демонстрація: www.youtube.com/watch?v=g8IlYRepclE
