Выбор технологии
Пользовательский интерфейс / Front-end
Несомненно, это было самое простое решение, которые мы приняли. Adobe Flex и ежу понятно! У нас просто не было времени на написание проекта на чем-нибудь еще! Мы рассчитывали создать браузерную игру, но Adobe AIR предложил очевидные преимущества:- Обнаружение сетевых ошибок – мы можем обнаружить проблемы со связностью сети и отреагировать соответствующим образом
- Обнаружение неработающих пользователей – мы можем определить, прекратил ли пользователь работу с мышкой и клавиатурой и просто отключить его
- Управление пользовательским интерфейсом – мы можем лучше контролировать восприятие пользователем, управляя каждым аспектом пользовательского интерфейса, включая место, размер, насыщенность и т.д.
Серверная платформа
Выбор подходящей серверной технологии заставил нас подумать. Поскольку я знал, что буду отвечать за разработку внутреннего интерфейса, то это решение было весьма серьезным для меня! Серверный код служит в основном как интерфейс между клиентским приложением и базой данных. Сервер выступил бы также в роли «диспетчера сообщений» для многочисленных клиентов, уведомляя их о деятельности других пользователей, например, о передвижении фигур на игровом поле, входе в комнаты, запуске игры и т.д. Мы рассматривали следующие технологии:- Java – У меня уже был опыт разработки на Java, и я уже создавал как коммерческие, так и бесплатные продукты на Java. К тому же я знал, что Java хорошо совместима с Flex, но меня беспокоило количество времени, которое на это надо потратить
- PHP – Мои партнёры-разработчики уже работали с PHP, но это было не на профессиональном уровне, так что я подумал, что изучение PHP отнимет слишком много времени
- ColdFusion – Несмотря на то, что я работаю на Бена Форта (Ben Forta), я не был уверен, что ColdFusion подходит для этого проекта. У меня было совсем мало опыта работы с ColdFusion, и я не считал себя специалистом. Во время разговора о наших требованиях к внутреннему интерфейсу Бен отметил несколько хороших моментов: 1. Написать код на ColdFusion для работы с базами данных можно очень быстро, да и выучить его легко. 2. ColdFusion и Flex очень хорошо работают вместе. 3. У ColdFusion есть хорошая поддержка передачи сообщений в LCDS или BlazeDS. 4. Администрирование ColdFusion очень простое. После этой беседы я провел дополнительное исследование и пришел к выводу, что ColdFusion может быть правильным выбором. Я взял копию трехтомника "ColdFusion 8 Web Application Construction Kit" и выборочно пробежался глазами. Когда принималось это решение, не было еще даже бета-версии ColdFusion 9, так что я продолжил работу с 8 версией. Когда дело касается создания программного обеспечения, я становлюсь немного консерватором. «Побочным эффектом» моего нового увлечения ColdFusion было участие в туре группы пользователей CF в поддержку CF9, что было очень весело. Я отказался подняться на сцену перед толпой разработчиков и «вещать» о том, что я никогда серьезно не использовал, но теперь, когда я с головой нырнул в CF, я, наконец, почувствовал себя специалистом.
Серверная ОС
Здесь нечего добавить кроме того, что я люблю стабильность, эффективность и универсальность Linux. У меня многолетний опыт разработки и управления крупномасштабными приложениями, созданными на операционных системах Unix, так что это определенно моя комфортная зона. Я выбрал 64-bit Ubuntu 8.x (тогда это была самая последняя версия – мне все еще нужно обновить ее до 9.x).Серверная база данных
Мы выбрали MySQL в качестве движка базы данных. Он надежный, быстрый, простой в установке и администрировании, к тому же он точно работает. Я никогда не использовал MySQL для создания крупномасштабного приложения со многими предполагаемыми транзакциями, так что посмотрим, как он с этим справится. Модель данных сама по себе достаточно проста. Я убрал триггеры и сохранил процедуры для открытого продвижения дополнительных возможностей. Так что MySQL хорошо справляется. Я даже использую пару таблиц только в памяти для переходных/временных данных, например, списка зарегистрированных лиц и т.д. Я, как правило, создавал структуры памяти для этого, но использование таблиц только в памяти сократило количество кода, которого мне надо было написать.Передача сообщений
Приложения на Flex могут делать удаленные запросы в стандартный ColdFusion без установки дополнительного программного обеспечения, так что мы им воспользовались. Тем не менее, нам нужно было межплатформенное программное обеспечение для передачи сообщений от клиента к клиенту и от сервера к клиенту. Эти сообщения используются для общения игроков между собой, уведомлений о сделанном ходе и многих других событиях игры. BlazeDS против LiveCycle Data Services (LCDS) И BlazeDS и LCDS предлагают опубликование/подписку сообщений. ColdFusion 8 связывается с LCDS (хотя необходима покупка отдельной лицензированной версии, если вы используете его на более чем одном процессоре), так что мы пошли по пути наименьшего сопротивления. LCDS также поддерживает RTMP (протокол обмена сообщениями в режиме реального времени), а это высокопроизводительная, масштабируемая дополнительная возможность. Примечание: ColdFusion 9 теперь идет в связке с BlazeDS, а не LCDS, но LCDS может быть интегрирован. Поскольку мы использовали ColdFusion 8, то нам не пришлось ничего интегрировать. Доказательство правильности концепции На данном этапе мы уже выбрали инструменты и технологии, которые мы будем использовать для создания ChessJam. Тем не менее, мы все еще не были уверены на все 100%, что у нас есть все, что нам может потребоваться для создания этого сложного приложения, так что мы решили написать ряд маленьких приложений для проверки правильности концепции.- Flex вызывает CFC компонент, который возвращает данные различных типов – проверено!
- Подписка на канал доставки сообщений при помощи Flex mx:Consumer – проверено!
- Опубликование сообщений в режиме реального времени из Flex using mx:Producer – проверено!
- Опубликование сообщений в режиме реального времени из ColdFusion при помощи Event Gateway (DataServicesMessaging) и получение их в Flex – проверено!
Некоторые сведения о коде
Жаль, что я не могу опубликовать весь Flex проект и CFC компоненты, увы, это невозможно. Как бы то ни было, я, по крайней мере, могу поделиться самой ее сутью. Вызов ColdFusion из Flex Ниже я описал код, показывая, как мы вызываем функции внутреннего интерфейса ColdFusion, определенные в некоторых CFC компонентах. Существуют функции внутреннего интерфейса для аутентификации пользователей, записи ходов, запуска игры и многого другого. Вызов ColdFusion из Flex очень прост. Настроив выполнение какой-либо функции один раз, вам потребуется всего лишь несколько секунд, чтобы запустить новые. Большинство наших функций возвращают числа, строки и результаты запросов (Array collection). Вы найдет кучу дополнительной информации по удаленному управлению ColdFusion. Есть также вспомогательные ресурсы на Adobe TV, в том числе и тот, который создал Бен Форта и который помог мне начать работу.- Игра между двумя игроками в браузере (без иллюстрации пока)
- Возможности простого чата
- Повторное подключение к игре (если вы закроете ваше приложение и повторно подключитесь, пока игра все еще будет идти, то вы автоматически присоединитесь к игре)
- Функции наблюдения за игрой (вы можете наблюдать за игрой других участников – полезно для проведения турниров и т.д.)
- Башни и комнаты – обновление информации для клиентов в режиме реального времени о том, когда другие пользователи входят или выходят
- Определение неактивных пользователей (на стороне сервера) – простой CFM, проходящий через ряд запросов каждые пять минут для управления временем ожидания в неактивных играх и т.д.
- Иллюстрации и наша первая сборка на AIR. Это было весело! Тодд просто не оставил камня на камне от нас со своими версиями дизайна
- Регистрация, создания профиля, обновление профиля, изменений пароля и прочие обязательные скучные штуки
- Расширенная регистрация активности на стороне сервера, что позволяет отслеживать подобные вещи в режиме реального времени
- Первое испытание ChessJam – мы пригласили 20 друзей и членов семьи для установки и проверки первой версии игры, так что мы смогли увидеть, как все работает. Наши ожидания оправдались: мы нашли кучу ошибок! Например, человек, наблюдающий за игрой, может ее прекратить, хотя он даже не участвует в ней, просто нажав на кнопку «forfeit»! И это только одна из 100 ошибок, которые мы нашли
- Написание кода, версия, тест, написание кода, версия, тест, написание кода, версия, тест, написание кода, версия, тест, …
- Автоматическое обновление, определение неактивных пользователей (на стороне клиента), контроль связности сети и т.д.
- Версия 1.0 готова!
- Роботы! – 24 компьютерных игрока для тренировки своих навыков
- Судьи игры и список контактов
- Подробности скоро будут! Нам нужно еще несколько выходных!
Немного статистики
Мы все еще видим хороший рост нашей базы пользователей при практически полном отсутствии маркетинга. Мы не хотим быстро развиваться, поскольку так мы сможем добавить еще несколько функций и выявить ошибки. А пока немного статистики:- Сделано 80,000 ходов! Это один из самых главных показателей, поскольку становится ясно, сколько людей играет
- От 5,000 до 6,000 ходов в день – значительный рост
- 1900 игр сыграно
- Почти 1,000 пользователей из более чем 88 стран (меньше 50% из USA, что не может не удивлять, учитывая, что мы почти не рекламировали наш продукт)
Что не так
Я не хочу показывать вам всю подноготную нашего проекта, но, как и в любом новом проекте, у нас все еще есть открытые вопросы. Распределение памяти – немного сложная задача для нас, особенно если учесть, что некоторые игроки сидят в ней по нескольку часов. Мы делаем определенные успехи в этой области, так что я не переживаю по этому поводу. Иногда мы сталкиваемся с трудностями у игроков, у которых низко скоростное соединение или соединение с большими задержками, когда они делают быстрые ходы, хотя пока последняя версия, кажется, справляется с этим.Что дальше?
Как показывает время, мы работаем над несколькими новыми штуками:- Проведение нескольких игр одновременно – интерфейс, построенный на вкладках, позволяет играть несколько партий одновременно
- Шахматы «по переписке» – для тех, кто не может играть вживую. Эта функция позволяет каждому игроку делать ходы, когда у них есть для этого время. Вы можете играть несколько партий одновременно и при этом делать ход только один раз в день
- Турниры! У нас есть интересные планы проведения турниров. У нас уже есть список правил для проведения первого турнира. Исходя из моих результатов игры, могу вам сказать, что я скорее всего НЕ буду победителем турнира! Когда у меня есть время сыграть партию в ChessJam, меня обычно ждет провал
- Запись результатов игры и контроль. Данные у нас уже есть. Осталось только сделать красивый интерфейс
- С точки зрения использованных технологий, в ближайшем будущем я собираюсь обновить свой ColdFusion до 9 версии. Обычно я не перехожу на новую версию программы так быстро, но пока я слышал только хорошие отзывы от других пользователей ColdFusion. ColdFusion 9 повысит нашу производительность и мы горим желанием воспользоваться достоинствами новых функций, например, расширенной поддержкой cfscript, улучшенная работа CFC компонентов, источники данных по умолчанию, а также новые функции EXT2, включая усовершенствованную datagrid. Ну а пока я, наверное, продолжу работать с Ubuntu 8.x, поскольку я не вижу веских причин переходить к 9 версии для написания нашего приложения. Если что-то не ломается – нет нужды это ремонтировать. Мы точно будем тестировать AIR 2.0 в ближайшее время. AIR 2.0 обещает улучшить потребление памяти и использование CPU, а также предлагает множество новых API.
Перевод подготовил k4d
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.