Для создания любого продукта первым встает выбора скелета проекта на котором он будет работать (фреймворк)

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

Данный проект - Российский и сделан с уклоном на простоту работы с ним, с минимальным набором зависимостей от других библиотек учитывая опыт работы с западными системами. На данном проекте сделан этот сайт с его сервисами и проекты которые на нем опубликованы

В настоящее время на данном фреймворке ведется разработка проекта для внесения онлайн в игры - подробнее имеется пример ранней версии в github


Краткий обзор:

	1  Легкий в освоении (фреймворк состоит из ряда фаилов в папке core/)
	2  Архитектура основана на сервисах (независимые приложения в папке app/) легко переводимые на микросервисы (расположенные физически на разных серверах)
	3  MVC (разделение кода и представления)  паттерн
	4  Передерживание принципа SOLID
	5  Cледование стандартам PSR
	6  Современные шаблоны проектирования (фабрика, синглтон, декоратор, адаптер и тп)
	7  Скорость работы (нагрузочное тестирование показало в x30 более быстрый результат чем на фреймворках Symfony/Laravel)
	8 Свой собственная ORM/DBAL (гибридный принцип Database First и Object First основанный не на аннотациях классов, а на ключах БД и именовании полей), есть плагин для работы с XML
	9 При разработке используются практики современных фреймворков (Symphone, Laravel, Yii)
	10 Минимум зависимостей: проект использует лишь то, что реально нужно (легко отслеживать просадки в скорости, потребление памяти, особенно в CLI режиме с многопоточными приложениями)
	11 Для администрирования игрового мира используется веб сервис (Аналог CMS для сайтов и CRM для взаимодействия с пользователями)

Используемые технологии:

  • PHP 8 (Reflection, Closure, Cli)
  • Mysql 8 с поддержкой асинхронной работы
  • Parallel (работа на разных ядрах процессора)
  • Поддержка скриптов на языке LUA
  • Поддержка скриптов на языке JavaScript
  • GIT интеграция CI/CD 
  • PostgreSql (добавлен адаптер на перспективу)
  • Bootstrap 3
  • Smarty
  • Redis с поддержкой асинхронной работы
  • APCU
  • Doctrine (DBAL, ORM, поддержка принципа Object First поддерживается, на перспективу)
  • Symfony компоненты (в перспективе, например тч кеш)
  • JQuery
  • Асинхронный сервер Workerman
  • Composer
  • Apache (RewriteEngine) , (можно использовать Nginx)

На базе данного каркаса было успешно сделано множество приложений (сервис контейнеров) как для моих личных проектов (онлайн игры) так и для компаний в которых было необходимо в сжатые сроки разработать прототипы приложений MVP (CMS, CRM, ERP ...)


Сравнительные тесты CORE (ядра) фреймворка от 02.2021

Результат нагрузочного тестирования HTTP запросами для обычного сайта, указан в в миллисекундах (1 секунда = 1000 миллисекунд).

Инструменты SoapUI, 50 потоков, 5 секунд, кеш отключен) на страницу 404.

На Данном примере видно что помимо нагрузки на сервер имеет место тот факт что Laravel и Symfony не успевают освобождать FPM Child (стандартные php fpm с max_children = 5) и создается очередь ожидания освобождения процесса FPM .

Тем самым даже при увеличении числа max_children до достаточного что бы обработать все запросы параллельно скорость выполнения каждого будет равна параметру "min" в табличке ниже на сервере где производилось тестирование. На более мощных серверах и при использовании кэш показатели Symfony и Laravel можно улучшить в Х10 , но не стоит забывать что и показатели фреймворка "Моя Фантазия" вырастут пропорционально. Скорость Symfony и Laravel обусловлена большим количеством библиотек и overhead на роутинг http запросов

Однако скорость обработки запросов в секунду ограничена скоростью HTTP соединений (который работает на базе TCP) и работой самого PHP FPM . Выбрав медленное из них из данных выше можно сделать вывод что 2 миллисекунды (0.002 секунды) на сервере тестирования занимала скорость поднятия такого соединения и она не будет меньше на нем (те чистый результат работы PHP составляя min - 2 )

Laravel 8 : min 266 max 1730 avg 1077

Symfony 5 : min 574 max 4400 avg 2571

"Моя Фантазия" фреймворк : min 7 max 45 avg 10





Что нового?


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

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, шаблон проектирования
Создание сервера для онлайн ММО игр на PHP ч. 12 — Очереди и параллельное программирование на CPU
PHP, Анализ и проектирование систем, Разработка игр, Сетевые технологии, Параллельное программирование, php, go, онлайн-игры, очереди, очереди задач, очереди сообщений, очереди с приоритетом, websocket, unity, ммо

Кабинет

Игры