Всем привет! В этом посте я хотел бы поделиться своим опытом создания и развития сервиса для одной известной онлайн-игры.
В нем еще есть проблеск жизни, но, думаю, мы уже можем сделать окончательные выводы.
Об этой игре я узнал задолго до ее выхода и смог стать одним из первых бета-тестеров.
Я не ожидал многого от браузерной игры, но интерес взял свое.
Довольно быстро я нашел адекватное русскоязычное сообщество и присоединился к одному из кланов.
Первый вопрос, который возник, был: «Где яЭ» Следуя канонам жанра, я предположил, что мне нужно построить радар.
Но его почему-то там не было.
Далее я с удивлением обнаружил, что в игре вообще нет мини-карты.
Что было довольно странно, учитывая гигантское игровое пространство.
Причём, как позже выяснилось, его создание не входило в ближайшие планы разработчиков.
Немного изучив API сервера, я нашел, где взять нужные мне данные — списки пользователей с их базами данных.
За пару часов я написал парсер на PHP. Трудности возникли только с авторизацией.
Он был двухуровневым, с хешами и собственными заголовками, но тоже поддался.
Я сделал на коленке страничку, где просто расставил имена игроков в абсолютном позиционировании, и залил ее на бесплатный хостинг.
Поиск по карте осуществлялся с помощью браузера «ctrl+f», так же, как и масштабирование карты с помощью «ctrl+колесо мыши».
Я поделился этим творением со своим кланом.
Оказалось, что я не единственный, у кого не хватает карты.
Увидев это, клановцы очень обрадовались, а руководство клана «приказало» не говорить о карте за пределами клана.
На следующий день я разместил информацию о карте на общем игровом форуме.
За что был исключен из клана, но получил массу положительных отзывов от игроков.
Вдохновленный этой реакцией, я решил развивать карту дальше.
Сначала я попробовал заменить имена игроков маркерами из html-тегов, но при масштабировании все это выглядело ужасно.
Вторая попытка была использовать svg, но производительность оставляла желать лучшего.
Остался только холст, а тут все зашуршало гораздо быстрее.
Первый релиз на холсте выглядел так:
После внедрения еще пары функций количество посещений моего ресурса достигло десяти тысяч в день.
Вместе с ростом количества пользователей в игре открывалось все больше игровых серверов.
В тот момент один сервер (игровой мир) парсился около часа.
Оказалось, что по мере роста их количества карта каждого отдельного сервера обновлялась всё реже и реже.
Актуальность данных быстро упала, и пользователи начали жаловаться.
Внедрение мультисокета Curl хоть и сократило время парсинга одного мира вдвое, но полностью решить проблему не смогло.
На мое счастье, мне в личное сообщение написал один из разработчиков.
Указываем функции в коде, которые отвечали за работу с протоколом передачи данных, создание запросов и парсинг информации для отрисовки внутриигрового ландшафта.
После нескольких экспериментов по минимизации количества запросов время парсинга одного сервера сократилось до 6 минут. Вдохновленный такой удачей, я с удвоенным рвением принялся вырезать новые фичи.
Добавлена возможность рисовать на карте тактические маневры и делиться ими, полностью менять цветовую схему и настраивать значки.
И снова все сводилось к парсеру, когда количество миров приближалось к отметке 100.
Было решено полностью переписать бэкенд. За основу был взят ZeroMQ, появились менеджеры авторизации, парсинга, загрузки, соответственно набор воркеров для них + система мониторинга для этой радости.
Остается только вопрос, где все это разместить.
При нормальной работе проекта затраты на хостинг были бы просто астрономическими.
Поиски сервера в игровом сообществе не дали желаемых результатов.
Я решил вопрос покупкой нового оборудования для дома с аппаратной поддержкой виртуализации.
Более того, мне давно хотелось покопаться в этом вопросе.
Я сделал себе одну виртуальную машину, пробросив туда видеокарту и несколько USB-портов.
На остальных я установил систему, часть виртуальных машин была Linux, часть Windows. В связи с особенностями реализации 0mq. Также были проблемы с аптаймом сервиса, все равно не тир 4 :), но после смены провайдера все стабилизировалось.
Горячий парсер с новым оборудованием мог обработать сотни миров за пару минут.
Карта выглядела так:
Параллельно с этим я начал разработку клиента под Android. Я взял свой PHP API, портировал его на Java, расширил и реализовал базовый функционал.
Примерно в то же время к разработке захотел подключиться программист из Чикаго, чему я был весьма удивлён.
На его плечи легла задача реализовать уведомление игрока по электронной почте об атаке или разрушении его базы.
Коллега на C# написал подписчика для парсера, который отслеживал все базы всех игроков во всех мирах.
Но все прекратилось в один миг.
Мой «инсайдер» сообщил, что EA посчитала проект убыточным.
Их команда была расформирована и разбросана по другим проектам.
Разработка игры была заморожена.
Соответственно, развитие клиента и сервиса тоже перестало быть уместным для мертвого проекта, и я поставил на них крест. На данный момент трафик по моей карте составляет 2,5 тысячи человек.
Доход от рекламы с июля 2012 года составил 5 тысяч баксов.
Донат менее 200. P.S. Во время написания статьи Хетцнер вдруг обиделся, что я делаю по 100к пост-запросов в день с одного IP и заливаю 5ТБ трафика в месяц.
Библиотеку, которую я написал для работы с 0mq, можно посмотреть здесь: https://github.com/limitium/0MQ .
Если кому интересно, подготовлю ридми и сделаю пакет для композитора.
Ничего не течет, пашет 24/7 уже 2 года.
Дизайн проекта можно посмотреть здесь: github.com/limitium/C-CTA-map-frontend Теги: #php #zeromq #zeromq #html5 Canvas #igori #Разработка сайтов #php #Разработка игр
-
Настройка Yota Many
19 Oct, 24 -
Обзор Технологий Синтеза Речи
19 Oct, 24 -
Проверка Правильности Ввода Капчи На Лету
19 Oct, 24 -
Моргеллоны 2.0
19 Oct, 24