RPS среды выполнения кода JavaScript (используется движок V8js)





Количество запросов из игрового сервера к среде разработке языка программирования JavaScript в в секунду ~150.000 вызовов среды разработки без учета времени выполнения самого кода (8 ядер дают ~750.000, подробнее)

Выполнение компиляции происходит на лету (для примера, использование не рационально):

executeString (отдает фиксированную строку )  140 000 (8 ядер + физ сервер дает x4.5 к скорости)
executeString (отдает получение свойств объекта переданного из PHP)  80 000 (8 ядер + физ сервер дает x5 к скорости)
executeString (отдает выполнение метода объекта переданного из PHP)  40 000 (8 ядер + физ сервер дает x5 к скорости)
execiteString возвращающий анонимную функцию (closure) и вызываемый как метод PHP полученного объекта на 20% быстрее (за счет того что executeString  вызван единожды)

Тоже что и выше но код JS запроса заранее компилируется и его можно использовать повторно:

executeScript (отдает фиксированную строку) 600 000  (8 ядер + физ сервер дает x3.5 к скорости)
executeScript (отдает получение свойств объекта переданного из PHP) 300 000 (8 ядер дают x4 прибавку к скорости)
executeScript (отдает выполнение метода объекта переданного из PHP)  60 000 (8 ядер + физ сервер дает x5 к скорости)
executeScript возвращающий анонимную функцию (closure) на 30% медленнее (в зависимости что возвращает, полагаю особенность компиляции closure)

передача параметров из PHP 700 000 / свойство (8 ядер дают лишь x2.5 прибавку к скорости)

Заметки:
  • Добавлять новые значения из PHP в V8js  - медленно, для экономии времени добавление новых данных можно передать в пространство V8js объект один раз (тк он передастся по ссылке) , а в нем самом уже из PHP менять свойства (это создаст некое хранилище посредник) но свойства должны быть обязательно статичными в этом объекте
  • В данной технологии PHP и V8js делят некое общее хранилище памяти  однако в отличие от LUA объект передается по ссылке и сразу доступен.

Выводы: 

  1. В настоящее время javaScript более популярен за счет игрового движка Phaser2D (33.000 лайков), в то время как для разработки игр где игровые механики (есть движки где LUA используется в незначительной степени для описания действий в игре) написаны на LUA используется Love (3.000 лайков), однако имеет сосбвенную платформу по выпуску игру roblox.com . Lua имеет явный недостаток - это то что для получения свойств объекта PHP нужно вызвать некие функции (как если бы мы взвали методы объектов), но это можно решить кешируя в самом LUA значения , при изменении LUA - менять кеш, при изменении в PHP или JS - отправлять команду на изменение кеша (тк по большей части будет чтение это будет выигрышным выходом). На более мощном железе явный рывок в скорости
  2. В Javascript на рынке много библиотек для работы с физикой, графикой, есть общая память и получение свойств объектов отрабатывает быстро без нужды что либо кешировать (хотя и это тоже можно сделать по примеру LUA). Однако вызов методов объектов PHP явно проигрывает по скорости LUA на хорошем железе, но такие методы вызываются реже (например 1 раз в 200мс) чем читаются (сотни раз в 1мс) и меняются свойства (например раз в кадр 60мс). Пример методов: добавления на карту новых объектов, добавление объекты новых событий, сохранение игрока в базу. 






Что нового?


Статьи про разработку продукта

PHP, Разработка игр, Unity, Unreal Engine, Облачные сервисы, php, unity, mmo, mmorpg, сервер для игры

С 2021 года я начал делать свою MMO игру обнаружив что нет готовых сервисов ни в России, ни за рубежом. Но сделать игру я мечтал со времен «Бойцовского клуба» и текстового «Амулета дракона», вдобавок уже был неплохим программистом.

Так и родилась идея написать свое решение Авторитарного сервера для 2D Mmo RPG игр и, как говорил Илон Маск, «Батут работает».

Читать далее
ч.15 Игровой авторитарный сервер на процессах и его архитектура в картинках — Создание сервера для онлайн ММО игр на PHP
PHP, Программирование, Разработка игр, Unity, Unreal Engine, php, игровой сервер, разработка сервисов, онлайн-игры, разработка онлайн-игр
Создание сервера для онлайн ММО игр на PHP ч.14 — Сетевая карта и задержка кадра (Latency frame) по RFC 2544 (1242)
PHP, Проектирование и рефакторинг, Разработка игр, Сетевые технологии, Параллельное программирование, php, go, c#, онлан игры
Создание сервера для онлайн ММО игр на PHP ч.13 — Event-driven паттерн, JSON-RPC и почему не сервисная (SOA) архитектура
PHP, Программирование, Проектирование и рефакторинг, Разработка игр, Алгоритмы, php, event-driven, разработка игр, mmo, mmorpg, шаблон проектирования

Кабинет

Игры