antidot-fw / reactive-starter
响应式 Antidot 框架应用程序启动器
1.1.2
2021-02-02 19:39 UTC
Requires
- php: ^7.4|^8.0
- ext-json: *
- antidot-fw/antidot-react-psr15: ^0.0.1
- antidot-fw/cli: ^1.1.0
- antidot-fw/container: ^0.1.0
- antidot-fw/dev-tools: ^0.1.2
- antidot-fw/event-dispatcher: ^2.0.3
- antidot-fw/fast-router-adapter: ^0.2.0
- antidot-fw/logger: ^1.1.0
- antidot-fw/react-framework: ^1.1.1
- antidot-fw/symfony-config-translator: ^1.1.0
- antidot-fw/yaml-config-provider: ^0.1.0
- webmozart/assert: ^1.7.0
- wshafer/psr11-monolog: ^3.0.0|@dev
Requires (Dev)
- franzl/whoops-middleware: ^2.0
- laminas/laminas-component-installer: ^2.1.2
- phpro/grumphp: ^1.0
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^8.0|^9.0
- roave/security-advisories: dev-master
- squizlabs/php_codesniffer: ^3.4
- symfony/var-dumper: ^5.2
This package is auto-updated.
Last update: 2024-09-08 03:11:17 UTC
README
此框架基于其他开源软件的概念和组件,特别是 Zend Expressive、Zend Stratigillity、Recoil 和 React PHP。
安装
使用 composer 包管理器安装项目
composer create-project antidot-fw/reactive-starter dev mv dev/.* dev/* ./ && rmdir dev bin/console server:run
在浏览器中打开本地主机上的端口 5555
,您将看到 DriftPHP Server 正在运行。
配置
服务器配置
默认配置
parameters: server: host: '0.0.0.0' port: '5555' max_concurrency: 100 buffer_size: 4096 workers: 4
开发模式
要运行开发模式,您可以运行 config:development-mode
命令
bin/console config:development-mode
或者您可以手动重命名从 config/services/dependencies.dev.yaml.dist
到 config/services/dependencies.dev.yaml
mv config/services/dependencies.dev.yaml.dist config/services/dependencies.dev.yaml
热代码重新加载
composer require seregazhuk/php-watcher --dev
您可以使用 Php whatcher 与 composer 进行更友好的开发。
bin/console server:watch
在另一个控制台中检查内置的 CLI 工具
bin/console
异步使用
它允许在 PSR-15 和 PSR-7 中间件和请求处理器中执行承诺
PSR-15 中间件
<?php declare(strict_types = 1); namespace App; use Antidot\React\PromiseResponse; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; class SomeMiddleware implements MiddlewareInterface { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { return new PromiseResponse( resolve($request)->then(static fn(ServerrequestInsterface $request) => $handler->handle($request)) ); } }
PSR-7 请求处理器
<?php declare(strict_types = 1); namespace App; use Antidot\React\PromiseResponse; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; class SomeMiddleware implements RequestHandlerInterface { public function process(ServerRequestInterface $request): ResponseInterface { return resolve($request)->then( function(ServerrequestInterface $request): ResponseInterface { return new Response('Hello World!!!'); } );; } }
经典使用
它允许执行经典的 PSR-15 中间件和请求处理器
PSR-15 中间件
<?php declare(strict_types = 1); namespace App; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface; class SomeMiddleware implements MiddlewareInterface { public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { return $handler->handle($request); } }
PSR-7 请求处理器
<?php declare(strict_types = 1); namespace App; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; class SomeMiddleware implements RequestHandlerInterface { public function process(ServerRequestInterface $request): ResponseInterface { return new Response('Hello World!!!'); } }
基准测试
使用 apache ab 单线程
> ab -n 40000 -c 64 http://127.0.0.1:8080/ This is ApacheBench, Version 2.3 <$Revision: 1843412 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, https://apache.ac.cn/ Benchmarking 127.0.0.1 (be patient) Server Software: ReactPHP/1 Server Hostname: 127.0.0.1 Server Port: 8080 Document Path: / Document Length: 96 bytes Concurrency Level: 64 Time taken for tests: 16.201 seconds Complete requests: 40000 Failed requests: 0 Total transferred: 8960000 bytes HTML transferred: 3840000 bytes Requests per second: 2468.93 [#/sec] (mean) Time per request: 25.922 [ms] (mean) Time per request: 0.405 [ms] (mean, across all concurrent requests) Transfer rate: 540.08 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.0 0 1 Processing: 15 26 1.4 25 33 Waiting: 15 26 1.4 25 33 Total: 16 26 1.4 25 33 Percentage of the requests served within a certain time (ms) 50% 25 66% 25 75% 26 80% 26 90% 27 95% 29 98% 31 99% 32 100% 33 (longest request)
使用 wrk
> wrk -t8 -c64 -d15s http://127.0.0.1:8080/ [95ba8e6] Running 15s test @ http://127.0.0.1:8080/ 8 threads and 64 connections Thread Stats Avg Stdev Max +/- Stdev Latency 26.14ms 1.44ms 34.63ms 92.76% Req/Sec 306.84 24.52 373.00 81.17% 36670 requests in 15.04s, 8.50MB read Requests/sec: 2437.45 Transfer/sec: 578.42KB
在 The Benchmarker - Web Framework 项目中查看排名。