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 заслуживает огромного внимания и открывает нереальные возможности в производительности для высоконагруженных проектов.

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

Похожие статьи:
Чи можуть незрячі люди навчитись програмувати та працювати в IT? Відповідь на це питання знає Роман Боренько, співзасновник Inclusive...
В рубрике DOU Проектор все желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем...
Еще будучи студентом, Виктор Радченко возглавлял отдел по интернет-безопасности в «ПриватБанке». Но в 2011 году...
Кожного року ми збираємо моторошні фото українських IT-шників з Геловіну. І цей рік — не виняток. Тож...
Climbing Kilimanjaro is no easy task. It’s daunting but definitely worth it should you reach the summit. Before you can achieve this feat however, here are some things to lookout for...
Яндекс.Метрика