Download the PHP package sidalex/swoole-app without Composer

On this page you can find all versions of the php package sidalex/swoole-app. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package swoole-app

sidalex/swoole-app

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require

ru

Swoole-app Framework for Working with Swoole

Install

To install, execute the following commands:

To run the Swoole application, you need to create a script named server.php with the following content:

The $config variable should be \stdClass and can contain parameters described here.

By default, the server runs on 0.0.0.0:9501. You can override these values via environment variables or config.json:

To run background processes that should execute periodically (not triggered by user action but by scheduler), the CyclicJobsInterface is implemented. For a more detailed description of its usage, see here. To automatically start background cyclic processes, they need to be specified in the config here.

To create application endpoints, you need to create controllers classes. For each endpoint, you need to create your own class. Alternatively, create your own routing rule via notFoundController.

All operations inside CyclicJobs and controllers must be non-blocking. Otherwise, instead of increasing performance, you may lose it significantly, and the next request will not be processed until the blocking operation is completed.

All blocking operations must be wrapped in TaskExecutorInterface and executed as separate Task.

Config

To run the application, you need to create a stdClass with a set of properties (described in more detail below).

The intended use is to initiate configuration data from a json file, see example server.php

List of config parameters

.env File Format or environment variables in docker

Variables must start with SWOOLE_APP_ prefix. Example:

Gets converted to:

Priority order:

  1. Variables from .env file are loaded first
  2. Environment variables from $_ENV or passed to constructor override .env values

This allows you to define default values in .env file and override them via Docker or system environment variables. ini SWOOLE_APP_SERVER_MODE=PROCESS

or

SWOOLE_APP_SERVER_MODE=BASE json { "server": { "mode": "PROCESS" } } json { "server": { "mode": "BASE" } } ini SWOOLE_APP_SERVER_HOST=0.0.0.0 SWOOLE_APP_SERVER_PORT=9501 json { "server": { "host": "0.0.0.0", "port": 9501 } } ini SWOOLE_APP_DEBUG=true SWOOLE_APP_SWOOLEWORKER_NUM=4 SWOOLE_APP_SWOOLETASK_WORKER_NUM=8 SWOOLE_APP_SWOOLEDAEMONIZE=false SWOOLE_APP_SWOOLE__LOG_FILE=/var/log/swoole.log SWOOLE_APP_SWOOLEREACTOR_NUM=2 SWOOLE_APP_SWOOLE__MAX_REQUEST=1000 SWOOLE_APP_SWOOLETASK_ENABLE_COROUTINE=true SWOOLE_APP_SWOOLEPACKAGE_MAX_LENGTH=1048576 SWOOLE_APP_SWOOLE__BUFFER_OUTPUT_SIZE=1048576 json { "SWOOLE": { "worker_num": 4, "task_worker_num": 8, "daemonize": false, "log_file": "/var/log/swoole.log", "reactor_num": 2, "max_request": 1000, "task_enable_coroutine": true, "package_max_length": 1048576, "buffer_output_size": 1048576 } } json { "StateContainerInitiation": [ "YourApp\StateContainers\DatabaseConnectionContainer", "YourApp\StateContainers\CacheConnectionContainer" ] }

composer require sidalex/swoole-app ini SWOOLE_APP_DEBUG=true SWOOLE_APP_DBHOST=localhost SWOOLE_APP_DBPORT=3306

Конфигурация сервера

Фреймворк позволяет настраивать параметры сервера Swoole через переменные окружения или config.json.

Режим работы сервера

Вы можете настроить сервер для работы в разных режимах:

Конфигурация через переменные окружения:

Конфигурация через config.json:

или

Хост и порт сервера

Вы можете настроить хост и порт сервера:

Конфигурация через переменные окружения:

Конфигурация через config.json:

При использовании класса Application вы можете создать и запустить сервер:

Параметры сервера Swoole

Вы можете настроить дополнительные параметры сервера Swoole через переменные окружения с префиксом SWOOLE__:

Или через config.json:

Параметры:

Полный список параметров см. в Документации Swoole

Полный пример конфигурации

См. config.json.example для полного примера конфигурационного файла со всеми параметрами приложения и сервера Swoole.

Валидация конфигурации

  1. Создайте класс-валидатор:

  2. Проверка конфигурации:

notFoundController - строка класс с классом , который обрабатывает роуты не найденные по стандартному флоу, данный клас должен имплементировать Sidalex\SwooleApp\Classes\Controllers\ControllerInterface

controllers - массив namespace в которых рекурсивно удет осуществляться поиск классов Контроллеров(имплементирующих интерфейс Sidalex\SwooleApp\Classes\Controllers\ControllerInterface) так же для реализации класса контроллера можно испрользовать наследование AbstractController более подробно тут.

CyclicJobs - мкассив слассов , которые имплементируют интерфейс CyclicJobsInterface которы запускаются при стапрте приложения и выполняются циклично раз в определенный интервал времени подробнее тут

Task Задача

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

В этих процессах могут содержаться блокирующие операции.

Для запуска задачи необходимо создать объект класса BasicTaskData или использовать собственный класс, реализующий интерфейс TaskDataInterface. Подробнее здесь.

Методы Task:

task: запускает задачу без ожидания её завершения.

$data: объект, реализующий интерфейс Sidalex\SwooleApp\Classes\Tasks\Data\TaskDataInterface. По умолчанию предлагается использовать класс BasicTaskData. Подробнее здесь.

$dstWorkerId: идентификационный номер рабочего процесса. Если параметр не передан, сервер Swoole выберет для вас случайный и незанятый рабочий процесс.

$finishCallback: колбэк, который будет выполнен перед завершением задачи. Параметр необязателен.

taskwait - запуск ззадачи с ожитанием завершения и получения результата. ожидание результата происходит неблокирующим образом. задачи можно запускать из контоллера.

$data: объект, реализующий интерфейс Sidalex\SwooleApp\Classes\Tasks\Data\TaskDataInterface. По умолчанию предлагается использовать класс BasicTaskData. Подробнее здесь.

$timeout: время ожидания завершения задачи в секундах. Если истекает время ожидания, будет возвращено значение false. Минимальное значение - 1 мс.

$dstWorkerId: идентификационный номер рабочего процесса. Если параметр не передан, сервер Swoole выберет для вас случайный и незанятый рабочий процесс.

$result: результат выполнения задачи, должен быть экземпляром класса TaskResulted. Подробнее здесь.

Класс BasicTaskData

В котором в конструкторе передается 2 параметра

1 параметр ('Sidalex\TestSwoole\Tasks\TestTaskExecutor') - это название класса, который будет создан в задаче для исполнения. Он должен имплементировать интерфейс TaskExecutorInterface

2 параметр ( ['test' => 'test1'] ) - это массив с данными контекста, который необходим для исполнения логики содержащейся в классе задачи ('Sidalex\TestSwoole\Tasks\TestTaskExecutor' для примера)

Пример применения например в контроллере или в Cyclic Job:

Класс TaskResulted

Описание: Класс TaskResulted представляет собой результат выполнения задачи. Он содержит информацию о успешном выполнении задачи и её результате.

Свойства TaskResulted:

$success - приватное свойство, содержащее информацию о успешном выполнении задачи.

$result - приватное свойство, содержащее результат выполнения задачи.

__construct(mixed $inData, bool $success = true) - конструктор класса, принимающий входные данные и информацию о успешном выполнении задачи.

Методы TaskResulted:

getResult(): mixed - метод, возвращающий результат выполнения задачи. Может выбрасывать исключение типа TaskException.

isSuccess(): bool - метод, возвращающий информацию о успешном выполнении задачи.

Пример:

Класс Cyclic Job

Этот код требует периодического выполнения. Этот механизм позволяет запускать скрипты с регулярными интервалами. Он заменяет cron.

Для инициализации Cyclic Job необходимо объявить параметр CyclicJobs в файле конфигурации.

Пример инициализации конфига с использованием stdClass:

Пример инициализации конфига с использованием файла json:

Пример класса для Cyclic Job:

Любой класс, указанный в конфиге, должен реализовывать интерфейс CyclicJobsInterface.

Метод getTimeSleepSecond возвращает время в секундах, через которое будет выполняться метод runJob периодически.

Метод runJob содержит полезную нагрузку в плане бизнес-логики. Это метод содержит бизнес-логику, которая должна выполняться циклически.

Middleware

Приложение поддерживает систему Middleware для обработки HTTP-запросов.

Глобальные Middleware

Глобальные Middleware настраиваются в конфигурации приложения:

Middleware для контроллеров

Middleware можно прикреплять к конкретным контроллерам с помощью атрибутов:

Создание собственного Middleware

Middleware должен реализовывать MiddlewareInterface:

Конфигурируемые Middleware

Для Middleware, требующих конфигурации, реализуйте ConfigurableMiddlewareInterface:

Валидация конфигурации Middleware

Для проверки корректности конфигурации Middleware используйте MiddlewareConfigValidator:

Валидатор проверяет:

Класс Controller

Для создания новых маршрутов используется класс Controller. Чтобы добавить новый маршрут, вам необходимо создать класс, реализующий интерфейс ControllerInterface, и добавить пространство имен, в котором содержится этот класс, в файл конфигурации с ключом "controllers". Подробнее здесь

Также в фреймворке есть специальный абстрактный класс AbstractController, который может упростить создание класса Controller.

Чтобы создать маршрут для класса Controller, вам необходимо указать атрибут следующего вида:

или

Крайне важно, чтобы сначала был указан атрибут для этого класса.

Если подходящий контроллер не найден, будет вызван NotFoundController.

uri атрибутивный параметр

uri - этот параметр определяет, для какого маршрута будет использоваться данный контроллер.

Если вы укажете в маршруте, например, /test/version//items, то этот контроллер будет работать для uri, соответствующих /test/version/(любая строка)/items.

Если вы укажете /test/version/{version_number}/элементы в маршруте, поведение будет аналогично поведению с *, но $uri_params['version_number'] будет добавлен в конструктор контроллера.

параметр атрибута

method - показывает, какой метод будет уместен для вызова данного контроллера.

Обработка запроса

Метод execute класса Controller содержит основную бизнес-логику, которую приложение должно выполнить для этого запроса. Этот метод должен возвращать ответ (\Swoole\Http\Response), который содержится в

$this->response

Response

В классе Controller:

$this->response

Более подробное описание методов этого класса смотрите в официальной документации Swoole

Пример использования:

Запрос

В классе контроллера:

$this->request;

Более подробное описание методов этого класса смотрите в официальной документации Swoole

Пример использования:

notFoundController

Предназначен для обработки роутов, которые не были найдены роутером фреймворка, для выдачи ответа 404 или организации уникальной логики роутинга приложения.

Для инициализации необходимо передать имя класса в конфиге более подробно об этом тут

notFoundController должен имплементировать ControllerInterface

пример:

Контейнеры состояний

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

Создание контейнера состояний

Чтобы создать новый контейнер состояний: Создайте класс, который расширяет AbstractContainerInitiator или реализует StateContainerInitiationInterface

Реализуйте требуемые методы:

init() — инициализирует ваше состояние

getKey() — возвращает ключ, под которым будет храниться ваше состояние

getResultInitiation() — возвращает инициализированное состояние

Конфигурация JSON:

Доступ к контейнерам состояний

Доступ к контейнерам состояний возможен из любого места, где у вас есть доступ к экземпляру приложения:

Лучшие практики использования Контейнеров состояний

Инициализация: Контейнеры состояний инициализируются один раз во время запуска приложения. Убедитесь, что все необходимые ресурсы доступны в это время.

Безопасность потоков: Поскольку Swoole работает в многопроцессорной среде, убедитесь, что ваши контейнеры состояний:

Без сохранения состояния

Изолированы от процессов

Правильно синхронизированы для общих ресурсов

Управление ресурсами: Если ваш контейнер управляет ресурсами, такими как подключения к базе данных, при необходимости реализуйте надлежащую очистку в деструкторе.

Именование ключей: Используйте описательные и уникальные ключи для ваших контейнеров, чтобы избежать конфликтов.

Пользовательские обработчики событий

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

События

Доступные события для перехвата:

Событие Описание Тип воркера
workerStart Запуск воркера HTTP / Task
workerStop Остановка воркера HTTP / Task
request Каждый HTTP запрос HTTP
task Выполнение асинхронной задачи Task
connect Установка соединения HTTP
close Закрытие соединения HTTP

Формат обработчика

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

Приоритет

Обработка ошибок

Примеры


All versions of swoole-app with dependencies

PHP Build Version
Package Version
Requires yurunsoft/guzzle-swoole Version ^2.2
haydenpierce/class-finder Version ^0.5.3
oittaa/uuid Version ^1.9
psr/log Version ^3.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package sidalex/swoole-app contains the following files

Loading the files please wait ...