millken / ypf
PHP framework & Application Server.
3.1.2
2021-01-06 03:46 UTC
Requires
- php: >=7.2.0
- guzzlehttp/psr7: ^1.4
- psr/container: ^1.0
- psr/http-message: ^1.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
- psr/log: ^1.0
- psr/simple-cache: ^1.0
Requires (Dev)
- lawoole/swoole: dev-master
Suggests
- ext-swoole: swoole extension
- ext-yac: shared memory cache extension
- dragonmantank/cron-expression: support cron worker
README
Overview
A micro php7 framework. in swoole mode, 10x performance can be improved.
The framework is mainly for the use of senior PHP programmers, keep everything under control.
Supports and uses various PSRs:
- PSR-2 (Coding Standard)
- PSR-4 (Autoloading)
- PSR-7 (HTTP Message)
- PSR-11 (Container Interface)
- PSR-15 (HTTP Middleware)
Installion
composer require millken/ypf
Requirements
- PHP 7.2+
- Swoole 4.2+ (Optional but recommended)
Usage
php swoole.php
//swoole.php require './vendor/autoload.php'; use GuzzleHttp\Psr7\Response; $router = new Ypf\Route\Router(); $router->map('GET', '/', function ($request) { return 'test'; }); $router->map('GET', '/hello/{name}?', function ($request) { $name = ucwords($request->getAttribute('name', 'World!')); return new Response(200, [], 'hello '.$name); }); $services = [ 'factory' => Ypf\Application\Swoole::class, 'swoole' => [ 'server' => [ 'address' => '127.0.0.1', 'port' => 7000, ], 'options' => [ 'dispatch_mode' => 1, ], ], 'middleware' => [ new Ypf\Route\Middleware($router), ], ]; $app = new Ypf\Application($services); $app->run();
swoole performance
wrk -t 20 -c 200 -d 30s "http://127.0.0.1:7000/" Running 30s test @ http://127.0.0.1:7000/ 20 threads and 200 connections Thread Stats Avg Stdev Max +/- Stdev Latency 2.16ms 1.94ms 40.97ms 88.56% Req/Sec 5.50k 521.94 19.49k 86.64% 3289431 requests in 30.10s, 501.93MB read Requests/sec: 109285.69 Transfer/sec: 16.68MB
php -S 127.0.0.1:7000 cgi.php #cgi mode
//cgi.php require './vendor/autoload.php'; use GuzzleHttp\Psr7\Response; $router = new Ypf\Route\Router(); $router->map('GET', '/', function ($request) { return 'test'; }); $router->map('GET', '/hello/{name}?', function ($request) { $name = ucwords($request->getAttribute('name', 'World!')); return new Response(200, [], 'hello '.$name); }); $services = [ 'middleware' => [ new Ypf\Route\Middleware($router), ], ]; $app = new Ypf\Application($services); $app->run();
See the full example