DOU Проектор: Meduzzza — онлайн игра, созданная по рецепту успеха мобильной казуалки

В рубрике DOU Проектор все желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на  Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. .

Идея

Всем привет! Мы — молодой украинский стартап, состоящий из выпускников КПИ, и хотим рассказать о нашем опыте создания высоконагруженного проекта. Нашей целью было создать онлайн-игру, которая наберет популярность за считанные дни.

Однажды я наткнулся на перечень факторов успешной игры, который и привожу ниже:

— Бесконечный геймплей. Если навык игрока позволяет, то продолжать игру можно бесконечно;
— Один шанс. Если наш навык недостаточно хорош, у нас нет права на ошибку, проиграл — начинай все с самого начала;
— Хардкор. Завышенная сложность геймплея;
— Необычная механика, которая свойственна только этой игре или небольшому количеству игр;
— Отсутствие уровневости, уровни = зло.

Имея ключ к успеху, я заинтересовался, как же это делается? Захотелось понять — и не просто разобраться в архитектуре, а сделать и проверить. Так вот, прошло чуть меньше года, и мы объединили все вышеперечисленные пункты в нашем проекте meduzzza.io

Реализация

Игра заключается в том, что вы погружаетесь в подводный мир медуз и представлены одной из них. Вначале все медузы маленькие, но есть возможность расти, поедая пузырьки или же других игроков. Как и у реальных медуз, хвост — ядовитый, а скорость — обратно пропорциональна размеру. Основная цель игры — завоевать и удержать первенство, владея хорошим навыком.

Как всё работает? На сервере стоит таймер. Каждые n миллисекунд игра делает перемещение объектов на сервере, после — отправляет данные всем подключенным пользователям. От клиентов принимает новый вектор движения и применяет его к конкретному юзеру. И так по кругу.

В разработке мы использовали следующие технологии:
— Back-end: Asp core 1.0 update2, в качестве веб сервера Kerstel;
— Communicatiob: Websocket;
— Front-end: WEB GL (canvas).

Грабли и эволюция бэкенда. Есть масса примеров и документации про Websocket, но особо интересным нам показался SignalR, потому что он делает всю рутинную работу за разработчика — например, выбор транспорта (в приоритете WebSockets, Server-Sent Events, Long Polling, Polling), также для работы с ним есть масса готовых библиотек на разных языках. В общем, огромное спасибо разработчиками Microsoft: Damian Edwards и David Fowler.

Первоночальная версия была написана на ASP.NET 4.6. Но с выходом beta версии ASP Core 1.0 нас впечатлил тот факт, что у новой версии производительность больше в 18 раз. И в 6 раз больше, чем node.js! И мы перешли на новый ASP, отказавшись от IIS, мигрировали на Kerstel. Поскольку официальной поддержки SignalR у ASP Core пока нет, мы используем чистый Websocket, и это работает превосходно.

Как только мы столкнулись с огромным количеством одновременных пользователей, пришло время оптимизации. Основное, на что мы обратили внимание — это время выполнения каждой операции на сервере. Это интервал, за который пользователю необходимо получить новые данные. В нашем проекте игроки получают рассылку каждые 20 ms.

Необходимо:
— Дожидаться окончания отправки каждому подключенному пользователю. А если этого не делать, собирается огромное количество задач, которые используют множество байтов и, в результате, мы получаем out of memory exception;
— Отслеживать наличие пользователя со слабым интернет-соединением, и если отправка занимает более N миллисекунд, отменять ее для данного юзера.

Таким образом, пользователи, которые играют с хорошим соединением, не зависят от других пользователей.

Фронтенд и 3D модель на чистом WEB GL. Главное, на что нам пришлось обратить внимание, это образ нашего главного персонажа игры — медузы. Мы использовали WEB GL, так как по опыту работы на предыдущих проектах с Konva.js (там были memory leak), мы осознали истину: если это должно работать хорошо — это должно написано на самом низкоуровневом подходе.

На WEB GL модель можно посмотреть на русском и на английском.

Что касается дизайна, важно сделать обстановку в игре завораживающей и приятной для глаз. Главное — не переборщить с количеством цветов и их яркостью. А вообще важно привлечь к сотрудничеству дизайнеров — они-то в этом разбираются.

Такие плюшки, как покемоны. Мы решили порадовать наших пользователей покемонами. Ведь они стали мейнстримом, но не все решаются играть в оригинальную версию игры из-за многочисленных прецедентов. Для наших же игроков это совершенно безопасно, а тот, кто находит покемона, получает приятный бонус.

Результаты

С момента запуска meduzzza.io прошло 6 недель, и уже сейчас статистика такова:
— 51 тысяча уникальных посетителей;
— 180 тысяч сыгранных партий;
— 15 минут — средняя продолжительность игровой сессии.

Статистика посещаемости на данный момент:

На своем опыте мы удостоверились, что:
— .NET очень хорошо подходит для стартапа;
— ASP Core 1.0 заслуживает огромного внимания и открывает нереальные возможности в производительности для высоконагруженных проектов.

Спасибо за интерес! Надеемся услышать ваши отзывы о проекте и статье.

Похожие статьи:
Почну з головного: я обожнюю Vim. Це, звісно, не така вже й суперновина, якби не кілька уточнень: я переважно .NET-розробник і використовую...
Всем привет! Меня зовут Виктор, и я работаю менеджером проектов в компании Cogniance. Делюсь дюжиной интересных материалов по управлению...
У квітні 2023 року в американському видавництві Manning вийшла книга Geometry for Programmers («Геометрія для програмістів») авторства українського...
Меня зовут Максим, я работаю тестировщиком ПО, с интересом слежу за событиями в мире тестирования и IT. Самое полезное собираю...
Graphics Interchange Format (GIF) is becoming very popular among a lot of individuals and it is not a surprise to see that a lot of videos are being converted to this type of format. The most popular GIFs are the animated version...
Яндекс.Метрика