На данной странице будут собраны тесты скорости продукта и различных функций. Зачёркнутыми являются функции от которых решено было отказаться. Красными - над которыми ведется работа по ускорению. В настоящее время все расчеты игровых механик и физики ведутся лишь на процессоре
Железо:
CPU 2 ядра (2300 Mhz на ядро)
4Gb Ram
PHP 8.1
SSD
Условные обозначения
RPS WebSocket сервера - максимальное количество принятых пакетов отправленных из игрового клиента на WebSocket сервер
RPS игрового сервера - рассматривается как максимальное количество самых медленных игровых механик переданных на исполнение игровому серверу которые он способен выполнить в секунду
RPS к игровому серверу от WebSocket сервера - максимальное количество пакетов переданных на исполнение игровому серверу из WebSocket сервера
FPS игрового сервера - количество циклов (кадров/тиков) игрового сервера в секунду максимальное количество которых устанавливается администратор (в игровом движке Unity этот параметр известен как FixedUpdate time)
RPS HTTP сервера - количество запросов отправленных через браузер с компьютеров пользователей на сайта и админ панель , обработанных и отправленных назад клиенту
RPS к админ панели и сайту из HTTP сервера - скорость с которой запрос полученных HTTP сервером перейдет в среду выполнения кода на котором написана админ панель и сайт (php-fpm)
RPS среды выполнения кода PHP - количество запросов из игрового сервера к среде разработке языка программирования PHP в секунду (без учета времени выполнения самого кода и получения результата)
RPS среды выполнения кода Lua - количество запросов из игрового сервера к среде разработке языка программирования Lua в секунду (без учета времени выполнения самого кода и получения результата)
RPS среды выполнения кода JavaScript - количество запросов из игрового сервера к среде разработке языка программирования JavaScript в секунду (без учета времени выполнения самого кода и получения результата)
RPS WebSocket сервера (на базе фреймворка workerman)
Согласно публичным тестам при передачи пакета с текстом Hello World
RPS игрового сервера
Актуальные показатели скорости работы игровых механик (расчет физики, команд пользователя, алгоритмов и т.п.) на основании которых высчитывается RPS игрового сервера и их перечень (который продолжает увеличиваться) доступны в админ панели во вкладке API.
Время выполнения кода игровой механики указано в мс. (среднее, минимальное и максимальное в скобках) и включает в себя время вызова среды выполнения кода (название среды указано перед названием механики). Пример :
FPS игрового сервера
В связи с тем что RPS игрового сервера замедляет скорость работы отдельного кадра (игрового цикла в котором выполняются все механики всех существ на локации) и в целом количество этих кадров в секунду то реальный FPS на конкретной локации так же доступен в админ панели. Максимальное количество кадров в секунду настраивается администратором. В случае если в конкретном кадре время работы всех механик существ которых нужно обработать в этом кадре больше выделенного на кадр - время кадра увеличивается тем самым снижая и количество кадров в секунду. Пример: если максимальное количество кадров (FPS) будет установлено равным 1000 то на 1 кадр приходится 1 мс, а в случае если в кадре игровые механики будут выполнятся 2 мс. фактическое количество FPS (кадров) будет равно 500 в секунду
RPS HTTP сервера (apache)
???
RPS к админ панели и сайту из HTTP сервера (php-fpm)
??? переданных команд в секунду (при условии что настройки fpm max_children установлено в достаточном количестве и ядер процессора достаточно для поднятия соединений в нормальном режиме скорости и ни один потомок не ждет освобождения пула) согласно.
Минимальное потребление CPU на поднятый процесс 0.7%.
RPS к игровому серверу от WebSocket сервера (php-cli)
1.600.000 запросов в секунду благодаря обмену данными между параллельно работающими процессами (библиотека parallel).
RPS среды выполнения кода PHP
~1.500.000 запросов в секунду т.к. и WebSocket и игровой сервер написаны на одном языке программирования PHP.
RPS среды выполнения кода Lua
70.000 вызовов среды разработки в секунду без учета времени выполнения самого кода (8 ядер процессора дают 700.000, подробнее)
RPS среды выполнения кода JavaScript (используется движок V8js)
~150.000 вызовов среды разработки в секунду без учета времени выполнения самого кода (8 ядер дают ~750.000, подробнее)
Максимальное число игроков на игровом сервере (локации)
Будет равно количеству игроков и других объектов имеющих игровые механики суммарное время выполнение алгоритма в кадре которых (RPS игрового сервера) не будет понижать количества этих кадров (FPS игрового сервера) ниже минимально допустимого комфортного для игры (60 FPS). Другими словами максимальное число игроков и объектов на карте будет являться тем числом при котором обработка этих игроков и существ сервером не занимает более 16.6 мс. за один цикл (кадр/тик) сервера.
Использование игровым сервером CPU и RAM от 11.2022
CPU (Процессор) от 2 Ядер (чем больше тем быстрее смогут работать параллельно работающие программные сервера и производиться расчеты системой ):
Нагрузка в покое CPU ~ 0,05% (load average 1, 5 и 15 минут): 0.07, 0.02, 0.01
RAM (оперативная память) от 4ГБ, нужна в целом для работы служб “железа” , сам программный сервер потребляет доп мощности по следующей формуле:
1 Мб на запуска 1 экземпляра программного сервера ( 1 карта = 1 сервер )
~ 1 Мб данных на загрузку информации о где на карте ходить можно, где препятствия
+ ~ 0.005 Мб на каждого монстра, объект, игрока (в зависимости насколько много данных из базы будет браться)
GPU (видеокарта) - в настоящее время сервер не поддерживает расчет на видео карте (речь идет про видео карту именно сервера, не игроков), однако прибавка в скорости гарантирована (за счет того что в видео карте в сотни раз больше процессоров)
Минимальная скорости интернета для игры (тест от 11.2022)
Для теста было взята нагрузка 100 блуждающих объектов что постоянно отправляли поток пакетов с координатами. При скорости интернета 0.22 Мбит/Сек при одновременной действии 100 мобов (игроков) на карте игровой пакеты будут отправляться и приходить в клиент игры и игра будет с начальными признаками freez’ов (критический порог когда она начнет тормозить) тк Ping (разница между отправкой пакета и получением назад данных) составляет 0.2 секунды (игра НЕ тормозит в 90% времени за счет технологий интерполяции позволяющая игрокам с медленным интернетом побыстрее выполнять действия в игре уравновешивая ситуацию)
О дополнительных тестах отдельных функция языка и используемых библиотеках (в т.ч. баз данных) можно ознакомиться по ссылке