Эта схема у нас используется в другом проекте, у которого на стороне сервера nodejs, которая постоянно в памяти и там постоянно держится соединение с сервером.
У нас же nginx + php. Скрипт после отработки ничего в памяти не оставляет.
Проблемы решили путем снижения нагрузки на mongodb и отключением части шар. Когда уменьшили количество шар с 5 до 3, то стало несколько легче. Почему так получилось не ясно. Это был первый опыт использования mongodb. Возможно не знаем каких-то тонкостей настройки.
Практически все данные имеют связь с user_id.
Шардирование базы строется по user_id. К примеру 1-1000 в первую базу, 1001-2000 во вторую базу.
Аналогично с кэшем. Просто запущено несколько memcached на разных серверах.
Кешируются данные моделей, а точнее атрибуты (поля из базы)
В прошлом проекте были 10-15 тысяч игроков онлайн. Цель текущей реализации держать это число без особых проблем.
За счет масшабируемости мы можем увеличивать количество обработчиков, шардировать базу и кэш. Так что узкие моменты производительности на мой взгляд решены.
Я хотел ознакомить людей с возможной проблемой и решением, которое я применил. Я же не писал расширение для каталога Yii extensions, а показал часть кода нашего проекта.
Метод для приведения типов вообще в другом классе у нас, так как используется и для других задач. Для внес этот метод в представленный класс. Сейчас сделаю правку здесь на protected
Потому что кроме getParam есть еще getPost и getQuery, которые тоже используются в проекте.
Про функцию ctype_digit не знал. Думаю лучше использовать вместо работы с регулярками. Спасибо!
Если интересно, можете посмотреть примеры от разработчика LibCanvas libcanvas.github.com/.
Из всех доступных библиотек именно эта подкупила тем, что автор легко идет на контакт, помогает дельными советами и оперативно внедряет необходимые функции.
Так же порадовало то, что фреймворк завязан на ооп и atomjs, который мне пришелся по душе.
Я думаю, что про техническую сторону игры будет отдельный пост, в котором я приведу данные о производительности. Пока сказать ничего не могу конкретно.
События навешиваются на фигуры(шейпы). Объект состоит из шейпа и графики, которая отрисовывается в этом шейпе. Но шейпы могут быть не только квадратные и круглые, но и любой произвольной формы — полигон. Так что можно сделать к примеру звезду, которая будет правильно обрабатывать события.
1) Анимации спрайтовые, но могут быть реализованы и в любом другом виде. Спрайтовую анимацию из коробки поддерживает LibCanvas
2) 3) В LibCanvas реализован механизм, который позволяет перерисовывать только изменяющиеся части сцены. Это очень положительно влияет на производительность игры, особенно на планшетах
6) Да, планируется отключение анимации, которая не видна игроку.
7) Этот механизм реализован в LibCanvas. События навешиваются на объекты. Отрабатывает на основе zindex. Событие может быть проваливающимся или останавливающимся на первом срабатывании
8) Не совсем понял вопрос. Видимо речно о том, сразу ли рисуется вся игровая область. Да, нарисована вся, скрывается за счет css
У нас же nginx + php. Скрипт после отработки ничего в памяти не оставляет.
Шардирование базы строется по user_id. К примеру 1-1000 в первую базу, 1001-2000 во вторую базу.
Аналогично с кэшем. Просто запущено несколько memcached на разных серверах.
Кешируются данные моделей, а точнее атрибуты (поля из базы)
За счет масшабируемости мы можем увеличивать количество обработчиков, шардировать базу и кэш. Так что узкие моменты производительности на мой взгляд решены.
Про функцию ctype_digit не знал. Думаю лучше использовать вместо работы с регулярками. Спасибо!
Из всех доступных библиотек именно эта подкупила тем, что автор легко идет на контакт, помогает дельными советами и оперативно внедряет необходимые функции.
Так же порадовало то, что фреймворк завязан на ооп и atomjs, который мне пришелся по душе.
События навешиваются на фигуры(шейпы). Объект состоит из шейпа и графики, которая отрисовывается в этом шейпе. Но шейпы могут быть не только квадратные и круглые, но и любой произвольной формы — полигон. Так что можно сделать к примеру звезду, которая будет правильно обрабатывать события.
2) 3) В LibCanvas реализован механизм, который позволяет перерисовывать только изменяющиеся части сцены. Это очень положительно влияет на производительность игры, особенно на планшетах
6) Да, планируется отключение анимации, которая не видна игроку.
7) Этот механизм реализован в LibCanvas. События навешиваются на объекты. Отрабатывает на основе zindex. Событие может быть проваливающимся или останавливающимся на первом срабатывании
8) Не совсем понял вопрос. Видимо речно о том, сразу ли рисуется вся игровая область. Да, нарисована вся, скрывается за счет css