Pull to refresh

ч.16 Сервер для 2D MMO RPG игры (realtime) — MVP готов

Level of difficultyEasy
Reading time4 min
Views1.5K

С 2021 года я начал делать свою MMO игру обнаружив что нет готовых сервисов ни в России, ни за рубежом. Но сделать игру я мечтал со времен «Бойцовского клуба» и текстового «Амулета дракона», вдобавок уже был неплохим программистом.

Так и родилась идея написать свое решение Авторитарного сервера для 2D Mmo RPG игр и, как говорил Илон Маск: «Батут работает».

От идеи до реализации MVP сервера для Mmo игры прошло 3 года
От идеи до реализации MVP сервера для Mmo игры прошло 3 года

Есть сервисы-аналоги, но для ММО они либо не подходили либо требовали существенных доработок и непонятно как их теперь из РФ оплачивать (они для сессионных игр, их исчерпывающий список ниже).

Сервисы на мировом рынке для разработки онлайн игр
Сервисы на мировом рынке для разработки онлайн игр

Сервер нужен был авторитарный (P2P соединения или с проверками на клиенте для жанра MMO был не вариант), для тех кто не знает что это такое пример сравнения серверов ниже.

Что такое авторитарный сервер
Что такое авторитарный сервер

Это добавляло с одной стороны сложность (нужны были инструменты для изменения/добавления кода на сервере), так появился инструмент редактирования кода игровых механик — Web IDE.

Игровые механики и поведение NPC можно описывать на PHP, LUA и JavaScript
Игровые механики и поведение NPC можно описывать на PHP, LUA и JavaScript

Конечно, нужны были инструменты для настройки характеристик, игрового баланса, предметов и прочего (гейм дизайнер не полезет учить PHP и JS — максимум цифры поправит), и так я сделал редактор существ.

Изменение игровых существ и игроков без программирования в MMO RPG
Изменение игровых существ и игроков без программирования в MMO RPG


Нужно было что бы сервер имел представление о мире, его препятствиях для расчета пути NPC (игровых существ под управлением ИИ) и проверки проходимости области, так родилось приложение для загрузки 2D игровых карт.

Игровые карты можно добавлять в Mmo RPG через программу Tiled (https://www.mapeditor.org/)
Игровые карты можно добавлять в Mmo RPG через программу Tiled (https://www.mapeditor.org/)

И только в самом конце нужно было позаботиться что бы сервер мог обслуживать и рассылать данные сотням и тысячам игроков, придумать систему оркестрации, горизонтального масштабирования и бесконечного бесшовного 2D мира. Так спустя 3 года разработки вишенкой на торте стала сервисная архитектура, где одни из сервисов выступал работающий в параллели WebSocket сервер.

Горизонтально масштабируемый WebSocket сервер для 2D Mmo игры
Горизонтально масштабируемый WebSocket сервер для 2D Mmo игры

Моя разработка в серии статей встретила критику со стороны читателей в вопросе производительности. Требовались инструменты замера скорости работы. Сложность была в том, что т.к. сервер авторитарный таких метрик как PING было не достаточно — сервер тратил время не только на отправку и получение пакетов игроков, но и на вычисления команд игроков, расчета, что делает NPC, периодического сохранение в БД (последнее было вынесено в отдельный сервис).

Я написал приложение, что замеряло все: время отправки / сжатия пакетов, отдельных механик, обмена данными между сервисами — все с точностью до тысячной миллисекунды, а так же использование CPU и RAM.

Панель замеров Perfomance 2D MMO игр
Панель замеров Perfomance 2D MMO игр

Если не вдаваться в детали то на VPS за 10$ (Ubuntu, 2 CPU, 2Gb RAM) могут одновременно играть +-300 игроков, формулы расчета есть на моем сайте.

И таких серверов может бесконечно и это останется единый бесшовный мир, где игроки со всего мира будут играть вместе (я лично проехал от юго-восточной Африки до Индии при PING 150-250 добавляя интерполяцию и экстраполяцию).

Демонстрационная игра пока простенькая, не замысловатая, без сюжета и музыки, мало механик, но игровой сервер одинаково хорошо работает как для браузерных игр, так и для версии на ПК, мобильных устройствах (код я выложил на GitHub). С готовой архитектурой сервера я не вижу того, что потребовало бы выход за рамки Web IDE.

Конечно, есть и 3D игры и кому, то хочется нестандартных режимов, новых жанров (типа стратегий или баталий). Для этого я сделал возможность не только редактировать отдельные механик (выстрел, движение к цели, дебафы, крафт, прокачка и т.д), но и самим, из личного кабинет на WEB, не погружаясь в иерархию всего проекта, приложений, сетевого взаимодействия редактировать тот код, который отвечает только за игровое взаимодействие — я назвал это Игровые Фреймворки (пока доступен только для RPG игр, в планах матчмейкинг и стратегии).

3 года разработки MMO RPG сервера игры в одном слайде
3 года разработки MMO RPG сервера игры в одном слайде

Как видите игровой сервер не просто шлет пакеты и ошибочно полагать что любой с ходу может сделать онлайн игру более чем на 20 человек (такое ограничение у западных аналогов).

За 3 года разработки был проделан колоссальный труд и получилось что-то типа Тильды / Битрикса, но для онлайн игры.

Я стою перед выбором: сконцентрироваться над B2B продуктом предоставляя новые инструменты разработчикам или делать свою игру, и я спрашиваю вас:

Нужен ли Вам — разработчикам игр подобный сервис?

Ваша обратная связь в опросе ниже и в комментариях будет ценна для меня. Я так же рассматриваю партнерство сделать MMO игру в команде.

В моих планах сделать сервис для 3D игр, добавление без программирования в игру музыки, анимацию героев, список друзей, новые игры

Планы разработки сервиса для 2D Mmo RPG игр my-fantasy.ru на 2024 год
Планы разработки сервиса для 2D Mmo RPG игр my-fantasy.ru на 2024 год
Планы разработки сервиса для 2D Mmo RPG игр my-fantasy.ru на 2024 год
Планы разработки сервиса для 2D Mmo RPG игр my-fantasy.ru на 2024 год

История:

  1. Введение

  2. Масштабируемость и асинхронность

  3. WebSocket

  4. Redis

  5. LUA и JavaScript

  6. Выбор технологий, протокола и архитектурный шаблон Entity Component System

  7. Игровые локации (тайловые карты)

  8. Клиентская часть на Unity

  9. Игровые серверные механики

  10. Открытый бесшовный мир в 2D игре

  11. FPS, Ping, паузы между командами, интерполяция и экстраполяция

  12. Очереди и параллельное программирование на CPU

  13. Event-driven паттерн, JSON-RPC и почему не сервисная (SOA) архитектура

  14. Сетевая карта и задержка кадра (Latency frame) по RFC 2544 (1242)

  15. Создание сервера для онлайн ММО игр на PHP

  16. Готовое MVP сервиса 2D MMO RPG игр (realtime)

Only registered users can participate in poll. Log in, please.
Может ли сервис быть полезен для вас как разработчика игр
10% Да1
90% Нет9
10 users voted. 3 users abstained.
Tags:
Hubs:
+3
Comments48

Articles