Блог / Статьи

Полезная информация для вашего хостинга

Введение в Framework X

Введение в Framework X

PHP претерпел значительные изменения и продолжает развиваться, предлагая новые функции, синтаксис и улучшенную скорость. Экосистема PHP также расширяется: многие разработчики создают фреймворки, чтобы упростить жизнь другим разработчикам. Существуют популярные полнофункциональные фреймворки, такие как Laravel и Symfony, а также легковесные микро-фреймворки, такие как FrameworkX.

FrameworkX — это легковесный микро-фреймворк для PHP, использующий архитектуру на основе событий и неблокирующую архитектуру, подобную Node.js, что идеально подходит для приложений с высокой одновременной нагрузкой и реального времени, таких как чаты или живые уведомления.

В этой статье мы рассмотрим, что такое FrameworkX и чем он отличается от традиционных PHP фреймворков. Давайте начнем!

Начало работы

Сначала убедитесь, что у вас установлены PHP и Composer. После установки вы можете добавить FrameworkX в ваш проект с помощью следующей команды: 

```bash
composer require clue/framework-x
```

FrameworkX не требует сложной настройки. Всё, что вам нужно, это файл `public/index.php`. Вот простой пример, который выводит «Hello World!» на главной странице: 

```php
<?php
require dirname(__DIR__) . '/vendor/autoload.php';
$app = new FrameworkX\App();
$app->get('/', fn () => \React\Http\Message\Response::plaintext("Hello world!\n"));
$app->run();
```

Чтобы запустить ваше приложение, введите: 

```bash
php public/index.php
```

Эта команда запускает локальный сервер с использованием встроенного сервера PHP, поддерживаемого компонентом ReactPHP Socket. Нет необходимости в Nginx или Apache. Ваш сервер будет работать по адресу http://127.0.0.1:8080, и он должен отобразить «Hello World!».

Помимо обычного текста, вы также можете возвращать данные в формате JSON. Например: 

```php
<?php
require dirname(__DIR__) . '/vendor/autoload.php';
$users = [['name' => 'Jon Doe'], ['name' => 'Jane Doe']];

$app = new FrameworkX\App();
$app->get('/', fn () => \React\Http\Message\Response::json($users));
$app->run();
```

 frame x1

 Асинхронные операции

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

ReactPHP — это библиотека, которая предоставляет компоненты, такие как EventLoop, Stream, Promise, Async и HTTP, которые позволяют выполнять асинхронные операции. Таким образом, задачи могут выполняться одновременно, не ожидая завершения других. Это идеально подходит для обработки нескольких подключений, HTTP-запросов или операций ввода/вывода одновременно.

В этом примере мы обновили наш `index.php`, чтобы выполнить запрос к API. Вместо использования функций `curl_*`, мы будем использовать компонент HTTP для выполнения асинхронного запроса.

 

```php
$app = new FrameworkX\App();
$app->get('/', function () {
    echo "Start\n";
    (new \React\Http\Browser())
        ->get('https://www.hongkiat.com/blog/wp-json/wp/v2/posts')
        ->then(function () {
            echo "End (API)\n";
        });
    echo "End\n";

    return \React\Http\Message\Response::plaintext("Hello world!\n");
});
$app->run();
```

Скорость

Тестирование FrameworkX на базовом, недорогом сервере DigitalOcean с 1 vCPU и 1 ГБ RAM. Он справился с около 4000 запросами в секунду без труда.

Уровень одновременных запросов: 50
Время на тесты: 22.636 секунд
Завершенные запросы: 100000
Неудачные запросы: 0
Запросы Keep-Alive: 100000
Всего передано: 17400000 байт
HTML передано: 1300000 байт
Запросов в секунду: 4417.69 [#/сек] (в среднем)
Время на запрос: 11.318 [мс] (в среднем)
Время на запрос: 0.226 [мс] (в среднем, по всем одновременным запросам)
Скорость передачи: 750.66 [Кбайт/сек] получено

Даже с дополнительной нагрузкой, такой как операции чтения с диска и рендеринг 100 списков из JSON-файла, он все равно обрабатывал около 2700 запросов в секунду.

Уровень одновременных запросов: 50
Время на тесты: 36.381 секунд
Завершенные запросы: 100000
Неудачные запросы: 0
Запросы Keep-Alive: 100000
Всего передано: 296700000 байт
HTML передано: 280500000 байт
Запросов в секунду: 2748.72 [#/сек] (в среднем)
Время на запрос: 18.190 [мс] (в среднем)
Время на запрос: 0.364 [мс] (в среднем, по всем одновременным запросам)
Скорость передачи: 7964.31 [Кбайт/сек] получено

С лучшими характеристиками сервера это могло бы быть намного быстрее.

frame x4

Заключение

FrameworkX — это мощный, легковесный микро-фреймворк для PHP. Он работает асинхронно и способен эффективно обрабатывать множество задач, аналогично Node.js. Это идеальный фреймворк как для создания простых приложений, так и для сложных приложений с высокой одновременной нагрузкой или реального времени.