- Всё серверное решение делится на серверные единицы разделенные по типам выполняемых задач
- Каждая серверная единица независима от остальных и не хранит информацию о предыдущих вычислениях
- Все серверные единицы окружает пространство данных (Как море и острова. С каждого острова можно набрать ведро воды - данных)
- Каждая серверная единица может получить очень быстро любые данные по проекту из пространства данных(NoSQL)
- Коммуникация в серверном решении осуществляется на основе сообщений через (память, Pipes, UDP, TCP)
Но разговор о серверной части. Для просчета игровой логики нами была применена система на "Изолированных временных потоках". Сглаживание методом кубических сплайнов и динамической коррекцией времени доступа клиент-сервер. Ну это все технические детали.
А главное в том, что сейчас можно создать очень мощный серверный движок за сравнительно небольшое время, используя услуги "облачных" провайдеров (Amazon, Windows Azure) и правильную структуру построения серверов. Облачные провайдера берут на себя всю рутину по организации облаков (групп серверов) их автоматическому старту и остановке в зависимости от нагрузки (Load Balanser). Такая система идеально подходит для игр типа Клик-Энд-Поинт, где не требуется сверхбыстрая реакция и обработка. Можно использовать бесшовные карты и другие интересные вещи.
Друзья! Если вы делаете ММО проект - забудьте о локальных серверах - это "Потолок". В любом случает будет какое-то магическое число пользователей после которого, ваша серверная система начнет падать. Если ваш проект будет посещаемым - жизнь заставит вас прийти к облачным системам. Но во многих случаях это будет уже поздно (финансы, время). Как я понял из своего опыта в серверной части нужно смотреть даже не на "завтра" а на "послезавтра". Скажу честно - хочется сделать действительно качественный продукт на миллионы клиентов. Если у вас есть интересный проект - обращайтесь. Поможем. А возможно и сделаем вместе.
Ниже приведу простую схему серверной части для ММО игры на "облаках".
По результатам тестов могу сказать - что при серверах на локальном облаке (выделеные сервера у немцев) мы не смогли завалить его - сделали более 10 000 коннекций - задержек в работе не было. Ведь помимо того что сервера распределенные они еще и сами многопоточные. Немного просел скрипт расчета геймплея - но это нужно просто соптимизировать. На одной карте в БонВираже у нас летало более 1000 объектов реальных - также сервер не напрягался. А вот клиент начинал сдыхать - Flash просто не предназначен для такой работы. Сейчас смотрим в сторону Unity3D. В проектах где реалтайм полный (клавишами), нужно использовать немного другую структуру с коннекциями прямо к расчетным серверам (там даже 10 мс задержка довольно много)
Кому интересно - собираемся на КРИ встретится и поговорить. Кому интересно - пишите мне в личку или на мыло.