1 / 23

Инструметы разработки социальных игр

Инструметы разработки социальных игр. Куперштох Алексей Alawar. Игра "Городской Магнат". Игра "Городской магнат". http://vkontakte.ru/app2386811 Стандартный ситибилдер Запустился 5 дней назад Команда: 1.5 серверных разработчика 2 flash-разработчика 1 QA

jeanne
Download Presentation

Инструметы разработки социальных игр

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Инструметы разработки социальных игр Куперштох Алексей Alawar

  2. Игра "Городской Магнат"

  3. Игра "Городской магнат" • http://vkontakte.ru/app2386811 • Стандартный ситибилдер • Запустился 5 дней назад • Команда: • 1.5 серверных разработчика • 2 flash-разработчика • 1 QA • Художники, менеджеры, гейм дизайнеры, ... • Команда разделена географически • Разница в часовых поясах - 4 часа • Одна из пилотных социальных игр компании Alawar

  4. Клиент-Сервер • Типичное клиент-серверное приложение • Клиент - Flash • Сервер - PHP • Протокол взаимодействия - JSON-based HTTP

  5. JSON открытый текстовый достаточная поддержка на клиенте и на сервере можно смотреть все вызовы в браузере - полезно для отладки клиентом может выступать не только flash AMF пропритетарный бинарный хорошая поддержка на клиенте, с сервером дела хуже JSON vs AMF

  6. Поиск ошибок • Логи на сервере • tail -f | grep uid • Debug-режим, который не видят простые смертные • Дебаговые приложения • Дебаговые юзеры • Логи на клиенте • debug panel в самой игре • console.log • Показ дополнительной информации прямо в интерфейсе игры (id, состояния, таймеры, ...)

  7. Ошибки синхронизации • Если что-то реализовано и на сервере, и на клиенте- это БОЛЬШОЙ источник габлей • Невозможно писать идентичный код с точностью до всех условий и округлений (у нас не получилось :) • Ответ от сервера очень важен. • ошибки не учитываем • ошибки учитываем, логируем • ошибки учитываем, логируем, падаем • Дополнительная информация при обмене между клиентом и сервером

  8. Ошибки синхронизации времени • Timestamp'ы у нас - это unix timestamp * 1000 • Хранятся в bigint • Переходные состояния • Жильцы сбежали - деньги с них больше не собрать. • Но если они сбежали менее минуты назад, то для некоторых действий мы еще считаем, что они не сбежали. • Если пользователь пытается собрать прибыль со здания, которое её произведёт только через 5 секунд - позволим - нам не жалко. • Накапливание ошибки времени

  9. Серверная часть • Принципы, архитектура • Инструменты, фреймворки, среды, языки, движки, библиотеки • Производительность, трафик • Проблемы

  10. Сервер - LNMP-стэк • Linux - Ubuntu Server 10.04 LTS • Nginx • MySQL + Memcached • Memcached отключён • PHP 5.3 • фишки 5.3 не используются

  11. MySQL • Почему бы и нет? • Проект и так достаточно экспериментальный • MySQL знают все • Его пока хватает, несмотря на write-ориентированность игры • Простые варианты использования MySQL и поддержка memcached - залог того, что при необходимости можно будет перейти на другие базы данных • MongoDB удобен в плане гибкости схемы данных в коллекциях • Redis хорош своими структурами данных и высокой производительностью

  12. Производительность • Простые алгоритмы, в основном сложность O(1) или O(log(n)) • Мы не используем фреймворк, НО, очень часто это приводит к тому, что самописные поделки тормозят еще больше - в основном из-за криво реализованных моделей и всяких ACL. Мы - не исключение. • Кроме отсутвия фреймворка - нет никаких предварительных оптимизаций. Не экономьте на спичках. В 90% случаев вы всё равно не отгадаете, что будет тормозить.

  13. Мониторинг • Техническая • Munin • Zabbix • Бизнес • Самописная статистика • На что тратят голоса

  14. Framework • Админка на YII • С моделью • Шаблоны для генератора админки • Игровой бэкенд - самописный. • Парсит json • Проверяет авторизацию • Исполняет серверные события • Запускает команды одну за одной • Пакует и отдаём ответы • Игровая модель - самописная • Очень не хватает Propel и Doctrine :)

  15. Генерация и хранение идентификаторов • Мы не используем AUTO_INCREMENT • Мы храним свои счётчики для каждого пользователя • ID новых строений генерируются клиентом • Практически все обращения к базе данных используют поле UID. • Лучше сразу закладываться на приспособенность к нескольким социальным сетям и хранить uid в виде строк с префиксами

  16. Библиотечные данные • Курсы валют • Здания • Типы жильцов • ...

  17. Деплоймент • Сейчас думаем над тем, как облегчить работу художникам и гейм дизайнерам. • Скорее всего это будет раскладывание библиотек и файлов с сервера на сервер по одному нажатию кнопки • С кодом и апдейтами базы данных по-прежнему будем работать вручную - дело в том, что сервер имеет состояние.

  18. Командная разработка • Разница в 4 часа • Незнакомые изначально люди • Несоблюдение принципа "Сервер всегда прав" • Сложно заслужить авторитет

  19. Инструменты для удалённой разработки • Skype • Google Docs • Google Drawings • http://www.websequencediagrams.com/

  20. Инструменты разработчика • IDE • Netbeans • PHPStorm • SCM • svn repo • git-svn client • Browser • Google Chrome • debug flash player • Bugtracker • Jira • QA-инженер должен описывать ошибки в виде "что делаю - что ожидаю - что получилось", иначе это не работает

  21. Вопросы? e-mail/gtalk: alexey.kupershtokh@gmail.com skype: alexey.kupershtokh

More Related