Декабрь 04, 2024, 03:47:31

Новости:

В случае недоступности игры на decline.ru используйте домен decline.pro


Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.

Темы - evg

1
Хотелось бы узнать мнение игроков по поводу платных возможностей. Готовы ли игроки платить и за что? Голосуйте, комментируйте, предлагайте свои варианты. Желательно, что бы эти возможности не давали платному аккаунту преимуществ перед обычными. Вопрос возник из-за нежелания некоторых игроков играть без клиента и из-за предложения других игроков заказать разработку клиента сторонним профессиональным программистам.
2
В данном топике буду выкладывать описание "потрохов" игры и отвечать на вопросы по реализации.

Текущая реализация

Хостинг:
Cервер игры развернут в облачном сервисе компании Selectel на площадке дата-центра в Санкт-Петербурге. Виртуалке доступно для использования 8 ядер CPU Intel Xeon L5520 2.27GHz и до 32Gb RAM, сейчас стоят лимиты на общую загрузку ядер совокупно не превышающую 100% загрузки одного ядра и 1Gb ОЗУ.

Потребление ресурсов:
При средней активности игроков, потребление облачных ресурсов составляет менее 10 часов 100% совокупной нагрузки одного ядра CPU в месяц и около 400Mb ОЗУ, что обходится в месяц в 300-400 рублей, с форумом получается 600-800 рублей в месяц. При большой активности игроков расходы возрастают до 1000 рублей в месяц. Сейчас появились более дешевые варианты хостинга, но Selectel радует надежностью, скоростью каналов, распределенным DNS и безопасностью, простои по вине хостера за несколько лет составили считанные минуты, а затраты пока не те, что бы их уменьшать жертвуя чем-то.

Игра состоит из нескольких компонентов:

  • Фронтенд: Скрипт PHP исполняемый в режиме FastCGI под http-сервером Lighttpd.

  • Бэкенд: Linux-демон, так же на PHP, запущен как сервис.

  • Очередь команд и хранилище: БД Redis, используется один экземпляр (инстанс). Во время перехода и раз в несколько минут (только во время простоя демона), данные из памяти сохраняются на диск, что уменьшает риск потерять данные при сбое. После просчета перехода выполняется резервное копирование базы.



Схема работы фронтенда:

  • Во фронтенд поступают HTTP-запросы от игроков, API запросов едино и для HTML-интерфейса в браузере, и для JS-интерфейсе в браузере и для отдельных клиентов (последние пока не реализованы).

  • После валидации запроса и проверки авторизации игрока, происходит ветвление. Если команда:

    • не изменяет состояния игры (запрашивается список замков в аккаунте, запрашивается область карты вокруг замка), то данные для ответа запрашиваются напрямую из БД.

    • изменяет состояние игры (делается ход юнитом, изменяется налог в замке и т.п.), то фронтенд:

      • сериализует данные команды, результат помещает под уникальным порядковым номером в очередь организованную в Redis (используется rPush);

      • в цикле запрашивает в Redis появление статуса обработки для команды с таким порядковым номером (используется hExists), период опроса 500 микросекунд (0.0000500 сек);

      • после появления статуса "команда в обработке" проверяет в цикле (используется hGet) его значение до тех пор, пока статуса не изменится на "команда выполнена", период опроса 500 микросекунд (0.0000500 сек);

      • После смены статуса на "команда выполнена" фронтенд забирает результат выполнения команды из промежуточного хранилища (используется hGet) в Redis.





  • Данные десериализуются, оформляются в ответ, если игрок использует браузер, то формируется HTML-представление, ответ отсылается игроку.



Схема работы бэкенда:
В очередь команд создается запрос (используется blPop), таймаут ожидания команды в очереди 5 секунд. Если:

  • очередь пуста в течение таймаута, то демон выполняет служебные операции по расписанию (удаляются истекшие сессии авторизациии, запускается garbage collector и т.д.) или засыпает на 500 микросекунд (0.0000500 сек), затем опрос очереди повторяется;

  • в очереди появляются команды, то в ответ на запрос извлекается команда с наименьшим порядковым номером, затем:

    • в Redis проставляется статус "команда в обработке" (используя hSet) для команды с таким порядковым номером;

    • данные команды десериализуются, из Redis извлекаются данные необходимые для валидации команды, команда валидируется;

    • из Redis извлекаются данные необходимые для выполнения команды, команда выполняется;

    • изменения игрового состояния сохраняются в Redis;

    • результат выполнения сериализуется и помещается в промежуточное хранилище результатов (используется hGet);

    • статус в Redis изменяется "команда выполнена" (используя hSet), очищаются временные переменные, опрос очереди повторяется.



Таким образом, отсутствует конкуренция на запись в базу данных, команды от игроков выполняются в строгом порядке соответственно времени их поступления в очередь. Невозможны ситуации случавшиеся в предыдущих реализациях, типа одновременного сноса замка несколькими юнитами с зачислением бонуса за снос одного и того же замка несколько раз.

Периоды опроса в циклах позволяют соблюдать баланс между лагом и нагрузкой на сервер.

В следующей версии:
За прошедшее время наработан некий опыт, стали доступными или появились в стабильных версиях некоторые возможности в Redis и PHP-расширениях, поэтому в новой версии произойдут следующие изменения:


  • В текущей версии API и HTML-интерфейса имеется лаг при движении  глаза и мага в областях с большим количеством юнитов. Поэтому, в API игры будут внесены изменения. Для глаза ответ на команды "движение" и "обновление", отосланных с параметрами по-умолчанию, не будет содержать список видимых им юнитов, этот список можно будет получить только при установке клиентом нового флага "осмотреться" в отсылаемой команде. И наоборот, для мага установкой новых флагов "без раненых" и "без партнеров" в отсылаемых командах "движение" и "обновление" можно будет отключить получение в ответе списка видимых им раненых юнитов и магов доступных для телепорта или супертелепорта.

  • Вместо штатных для PHP функций сериализации/десериализации будет использоваться библиотека двоичной сериализации igbinary, она быстрее, сериализованные структуры получаются компактнее, что позволит уменьшить потребление памяти Redis.

  • Данные игры, данные очереди команд, данные результатов выполнения команд, архив сообщений и статистика с логами игры будут разнесены по разным экземплярам (инстансам) Redis, что позволит распределить нагрузку на БД по нескольким ядрам процессора, снизит фрагментацию памяти и уменьшит потребление памяти процессами Redis, в том числе за счет возможности использовать различные настройки для различных экземпляров Redis, что позволит оптимальнее храненить разные типы данных. Возможно, что архив сообщений будет вынесен в SQL-базу, так как к архиву не требуется быстрый доступ и не целесообразно держать его в ОЗУ.

  • В ряде случаев сейчас используется несколько отдельных последовательных запросов к разным ключам Redis, например при чтении или изменении параметров юнита (атака, защита, здоровье и т.д.), для подобных последовательных запросов при чтении и записи будет использоваться пакетный режим, при котором одним запросом обращение сразу к нескольким ключам, что снизит накладные расходы на доступ к БД.

  • Механизм очереди и хранилища ответов будет основан на публикациях в каналах Redis (Pub/Sub), это позволит отказаться от циклов и задержек между повторными запросами, снизит потребление ресурсов сервера.

  • Будет изменена организация хранения некоторых данных игры и логов на более оптимальную.

  • Скорее всего, http-сервер будет заменен на nginx и будет задействован APC (PHP Cache). По крайней мере, на тестовом сервере именно такая конфигурация.

  • Появится консоль для прямого управлени демоном бэкенда. Мне будет проще администрировать игру с мобильных устройств без использования браузера, на игроках это отразится как потенциальное уменьшение простоев игры в случае нештатных ситуаций.



В результате, при увеличении активности игроков задержки (лаги) будут расти медленнее, увеличится устойчивость игры к DoS-атакам некоторого вида, упростится администрирование иры. Потенциально, при большом количестве активных игроков и большого размера карты снизятся затраты на аренду ресурсов в облаке, хотя для большого количества игроков имеет смысл арендовать выделенный сервер с фиксированной арендной платой и производительностью.
3
И снова здравствуйте!

В планах сборки под Windows, Linux и Android, но так как управление через тачскрин требует собственного кода и иного подхода к интерфейсу, то версия под Android будет разрабатываться факультативно. Программист из меня посредственный и свойственного клиенту Моргота качества ожидать не стоит, код не оптимален в части потребления ресурсов, но на видеокартах с поддержкой ускорения OpenGL тормозов при отрисовке быть не должно. Прототип уже сносно работает с картой 1000 х 1000 клеток, с картой меньшего размера будет работать гораздо быстрее. Нотариально заверенные скриншоты прилагаются, обратите внимание на счетчик FPS в правом нижнем углу.

Ubuntu 14.04 с аппаратным ускорением отрисовки:



Windows 7 x64 запущенной на виртуальной машине без аппаратного ускорения графики:


Android в режиме HiDPI:
4
Отключена привязка сессии авторизации к IP-адресу клиента, что снизит безопасность, но исключит сброс авторизации в игре при доступе в интернет через сети мобильной связи, чьи операторы присваивают клиенту при каждом пересоединении к сети новый IP-адрес. Игрокам испытывавшим эту проблему просьба сообщить, помогло ли им такое решение.
5
Предлагается следующая зависимость защиты замка от размера населения:

Вариант №2
Удар Население Защита замка
0 15000 4.74
1 14248 4.5
2 13534 4.27
3 12856 4.07
4 12212 3.86
5 11600 3.67
6 11018 3.48
7 10466 3.32
8 9941 3.14
9 9442 2.98
10 8968 2.84
11 8518 2.69
12 8091 2.56
13 7685 2.43
14 7299 2.31
15 6933 2.19
16 6585 2.08
17 6254 1.98
18 5940 1.87
19 5641 1.78
20 5357 1.7
21 5088 1.61
22 4832 1.52
23 4589 1.45
24 4358 1.38
25 4139 1.3
26 3931 1.24
27 3733 1.18
28 3545 1.11
29 3366 1.07
30 3196 1.01
31 3035 0.95
32 2882 0.91
33 2736 0.86
34 2598 0.82
35 2467 0.79
36 2342 0.73
37 2223 0.7
38 2110 0.67
39 2003 0.63
40 1901 0.6
41 1804 0.57
42 1712 0.54
43 1625 0.51
44 1542 0.48
45 1463 0.47
46 1388 0.44
47 1317 0.41
48 1250 0.4
49 1186 0.38
50 1125 0.35
51 1067 0.34
52 1012 0.32
53 960 0.31
54 910 0.29
55 863 0.28
56 818 0.26
57 776 0.25
58 736 0.23
59 698 0.22
60 662 0.22
61 627 0.19
62 594 0.19
63 563 0.18
64 533 0.16
65 505 0.16
66 478 0.15
67 453 0.15
68 429 0.13
69 406 0.13
70 384 0.12
71 363 0.12
72 343 0.1
73 324 0.1
74 306 0.1
75 289 0.09
76 273 0.09
77 258 0.09
78 244 0.07
79 230 0.07
80 217 0.07
81 205 0.06
82 193 0.06
83 182 0.06
84 171 0.06
85 161 0.06
86 151 0.05
87 142 0.04
88 133 0.04
89 125 0.04
90 117 0.03
91 110 0.03
92 103 0.03
93 96 0.03
94 90 0.03
95 84 0.03
96 78 0.03
97 73 0.03
98 68 0.03
99 63 0.03
100 58 0.02
101 54 0.02
102 50 0.02
103 46 0
104 42 0
105 38 0
106 34 0
107 30 0
108 26 0
109 23 0
110 20 0
111 17 0
112 15 0
113 13 0
114 11 0
115 9 0
116 7 0
117 5 0
118 4 0
119 3 0
120 2 0
121 1 0
122 0 0


Так же предлагаю учитывать разницу высот нападающего юнита и замка с соответствующим бонусом в защите/атаке тому, кто стоит выше, хотя изначально в Деке этого не было.
6
Замок Йоркшир отказался от оброка, что привело к краху индексов базы данных и аварийной остановке игры. Причина сбоя - кривые руки разработчика, то есть мои. Ошибка в коде еще не локализована, поэтому возможно повторение ситуации. Пропущенные переходы за 12 и 13 часов запущу чуть позже.

UPD: Переходы запустил в 16-ть часов, ходы юнитов должны были восстановиться. Если не восстановились - пишите.
7



















дата блокировкилогин учеткипричина блокировкикомментарий администрации
2013-05-10wfordmaxразблокирован
2013-05-10funksurus
8
Здесь будут изложены основные способы и методы выявления проблем возникающих при доступе к серверу Игры.

Резервные доменные имена:
Сервера игры: decline.com.ru
Форума игры: forum.decline.com.ru (пока форум по этому адресу доступен не в полном объеме)

IP-адреса:
Сервера игры: 37.200.68.89
Сервера форума: 37.200.68.189
Шлюза провайдера: 37.200.68.1

Оба сервера расположены на одной площадке компании Selectel, г.Санкт-Петербург, Россия. У хостера имеются подключения к основным российским точкам обмена трафиком. Пинг до шлюзов провайдеров:
Санкт-Петербурга ~8-10мс
Москвы ~12-25мс
Минска ~30-50мс
Краснодара ~30-80мс
Новосибирска ~100-120мс
Томска ~100-120мс
Сахалина - 140-180мс

Если браузер игры пишет, что не может найти указанный адрес, то попробуйте обратиться по резервному доменному имени http://decline.com.ru или непосредственно по IP-адресу сервера, набрав в адресной строке бразуера "http://37.200.68.89". Если по этим адреса сервер отвечает, то можете спокойно его использовать, на игровом процессе такая замена никак не скажется. Через некоторое время должен будет восстановиться и основной адрес.

Если же страницы в игре открываются медленно, не полностью или только после повторного обновления страницы, то необходимо проверить, не имеется ли потерь сетевых пакетов до сервера игры. В Windows это делается следующим образом: нажимаете клавишу "Win" и не отпуская её нажимаете клавишу "R". В открывшемся диалоге "Запуск программы" в поле "открыть" вводите "cmd" (без кавычек) и нажимаете клавишу "Enter" или кнопку "Ок" в окне диалога. В открывшемся окне командной строки необходимо ввести команду "ping -t -l 4096 37.200.68.89" (без кавычек) и нажать "Enter", после чего на экране пойдут строки протокола обмена пакетами с сервером, подождите секунд 30-60 и остановите выполнение команды нажав клавишу "Ctrl" и не отпуская ее нажав кнопку с латинской "C". Смотрим на строки со статистикой, там должно быть нечто подобное, но цифры будут отличаться в Вашем случае:
ЦитироватьСтатистика Ping для 37.200.68.89:
    Пакетов: отправлено = 200, получено = 198, потеряно = 2
    (1% потерь)

Возможных вариантов два:

  • Показания счетчика "потеряно" равны 0 и нет потерь пакетов между Вашим компьютером и сервером игры. В этом случае, виновато либо программное обеспечение нашего сервера и все игроки будут иметь проблемы, либо виновато программное обеспечение вашего компьютера и проблемы будут только у Вас. Узнайте, имеют ли других игроки проблем с доступом к нашему серверу, либо свяжитесь с Администрацией игры любым доступным Вам способом.

  • Показания счетчика "потеряно" отлично от 0. В этом случае, нужно убедиться, нет ли проблем между нашим сервером и шлюзом нашего провайдера. Для этого проверьте, не имеется ли потерь сетевых пакетов до шлюза нашего провайдера, выполнив команду "ping -t -l 4096 37.200.68.1" (без кавычек). Аналогично, возможны два варианта:

    • потерь пакетов нет - проблема на нашей стороне и необходимо известить Администрацию игры (хотя мы наверняка уже в курсе этой проблемы).

    • потери пакетов есть - проблема в цепочке сетей от Вашего устройства до нашего провайдера, в этом случае, необходимо провести диагностику своего сетевого подключение способом описанным ниже.






Продолжение следует.
9
Здесь будет создан FAQ по возможным проблемам и способам их выявления.

Вопрос: У меня плохо работает игра. Постоянно выкидывает из игры, приходится заново вводить пароль. При нажатии на ссылку появляется пустая страница или страница появляется не полностью, приходиться несколько раз обновлять страницу, что бы увидеть информацию.

Ответ: Для этого есть несколько причин:

  • Возможно, но маловероятно, что проблема вызвана сбоями в работе нашего сервера или оборудования компании предоставляющей нам каналы связи с интернет. При выявлении таких проблем мы уведомляем игроков на главной странице игры и в информационных сообщениях аккаунта.

  • В подавляющем большинстве случаев это вызвано плохой связью от игрока до сервера игры. Наш сервер расположен в г. Санкт-Петербург (Россия) и запросы на получение страницы от игрока до сервера могут проходить немалый путь через несколько промежуточных компаний-посредников (магистральных провайдеров), проблемы у одного из этих магистральных провайдеров могут сказаться на доступности нашего сервера для некоторых игроков. Важно понимать, что в этом случае, остальные игроки не будут испытывать проблем, даже если они расположены в том же городе, но подключены к другому провайдеру.

  • Если такая проблема возникает при выходе в интернет через модем сотовой связи (GPRS/EDGE/3G/4G), то виноват либо оператор предоставляющий выход в интернет (оборудование на базовой станции перегружено и пропускает только часть сетевых пакетов) и необходимо подать жалобу в его службу поддержки, либо низкий уровень сигнала (модем принимает не всю информацию) и можно попробовать изменить местоположение модема для более уверенного приема сигнала.



Вопрос: Я Петя, у меня игра плохо работает, а у Васи, моего соседа, игра работает хорошо. У нас один и тот же провайдер, подключение по кабелю, в чем может быть дело?
Ответ: Даже игроки расположенные в одном городе и подключенные к одному провайдеру могут иметь совершенно различные условия связи - один из игроков может испытывать проблемы при обращении к нашему серверу, а у другого игрока таких проблем может не наблюдаться. Причин может быть несколько:

  • У Пети могут быть проблемы с программным обеспечением на компьютере. Круг возможных проблем очень широк, например, фаерволл (брэндмауэр/сетевой экран/антивирус) может быть неверно настроен или работать с ошибками, что приведет к нестабильной передаче данных именно с нашего сервера. Не исключено, что на компьютере имеется программа "вирус", которая проявляет себя подобным образом. Не существует универсального решения, каждую ситуацию нужно рассматривать индивидуально. Для начала, попробуйте отключить фаерволл (брэндмауэр/сетевой экран/антивирус) и проверить, как это повлияло на передачу данных с нашего сервера. Если отключение помогло, то необходимо разбираться с настройками фаерволла (брэндмауэра/сетевого экрана/антивируса).

  • У Пети могут быть проблемы с сетевым подключением. Например, плохой контакт в розетке или разъеме сетевого кабеля, приводящий к сбоям при передаче информации или неисправный сетевой адаптер, либо программа-драйвер этого сетевого адаптера работает с ошибками. В этом случае, проблемы у Пети будут при доступе не только к нашему серверу.

  • Провайдер, к которому подключен Петя, может иметь проблемы с оборудованием. Провайдер использует для подключения Пети и Васи разные сетевые порты, порт к которому подключен Петя может выйти из строя или иметь неверные настройки. В этом случае необходимо обратиться в службу поддержки провайдера.



Вопрос: Как мне определить, где именно возникают проблемы?
Ответ: На нашем форуме существует специальная тема, где рассматриваются способы определения и решения проблем с доступом к нашему серверу. Ссылка на тему: http://forum.decline.ru/index.php/topic,56.0.html
10
Тестовые логины заблокированы, замки отдаются на разграбление.
11

       
  • Не могу зарегистрироваться на форуме.
    На форуме работает система антиспама, которая может ошибочно отклонять запросы на регистрацию. Поэтому, если у Вас не получается пройти регистрацию на форуме, то Вы можете отправить емайл на адрес eamaksimov@gmail.com, с указанием имени пользователя, под которым Вы желаете зарегистрироваться. В ответ я пришлю Вам пароль для доступа к форуму.

  •    
  • Не могу прикрепить аватар.
    Пока загрузка картинок не работает. Вы можете прикрепить аватар разместив его картинку на каком-то файл-хостинге и указав в настройках профиля ссылку (URL) на  нее. Форум сам скачает картинку и прикрепит ее в Ваш профиль.

  •    
  • Не сохраняются в "исходящих" личные сообщения отправленные другим пользователям форума.
    Что бы отправленные личные сообщения сохранялись в папке "Исходящие" нужно зайти в меню "Личные сообщения", затем в меню "Предпочтения", далее в меню "Изменить настройки", отметить пункт "Cохранять копии отправленных ЛС в папке Исходящие" и нажать кнопку "Изменить настройки".

12
Собственно опрос. Администрации интересно, как это видится со стороны Игроков.
13
Собственно субж.

По топам. Обновление топов каждый час?
14
В этой теме можно оставлять сообщения об обнаруженных ошибках.
15
В данной теме будут публиковаться подтвержденные, но еще не исправленные ошибки.


  • Не правильный уровень лечения у орков на переходе, должен быть 50% в замке (требуется обсудить)

  • Сообщений об атаке на юнит не учитывают расположение юнита в замке

  • Не работает уровень жизни в замке людей - не падает население при низком уровне жизни

  • После оркования в старых сообщениях об атаке на замок вместо погибших людей среди населения выдается количество погибших орков