ahmard / reaponse
ReactPHP 响应助手
1.0.1
2021-02-06 17:05 UTC
Requires
- php: ^7.4 || ^8.0
- nette/utils: ^3.2
- react/http: ^1.2
Requires (Dev)
- phpstan/phpstan: >=0.12.70
This package is auto-updated.
Last update: 2024-09-07 00:42:46 UTC
README
此库为 ReactPHP HTTP 组件提供美丽的语法,此库提供的语法与 NodeJS 非常相似。
安装
您需要 Composer 来安装此库。
composer require ahmard/reactphp-response
使用
注册中间件
- Test\Counter
namespace Test; use Reaponse\Http\HandlerInterface; use Reaponse\Http\ResponseInterface; class CountHandler implements HandlerInterface { protected static int $counts = 0; public function handle(ResponseInterface $response): void { self::$counts++; $response->write('Count: ' . self::$counts); $response->handler()->next(); } }
- Test\Server
namespace Test; use Reaponse\Http\HandlerInterface; use Reaponse\Http\ResponseInterface; class ServerHandler implements HandlerInterface { public function handle(ResponseInterface $response): void { $response->html(', Time: ' . date('H:i:s')); $response->end('.'); } }
- server.php
use React\EventLoop\Factory; use React\Socket\Server; use Reaponse\Http\Middleware; use Test\CounterHandler; use Test\ServerHandler; require 'vendor/autoload.php'; $loop = Factory::create(); $uri = '0.0.0.0:9200'; $myServer = new ServerHandler(); $myCounter = new CounterHandler(); $httpServer = new \React\Http\Server($loop, new Middleware($myCounter, $myServer)); $socketServer = new Server($uri, $loop); $httpServer->listen($socketServer); $httpServer->on('error', function (Throwable $throwable){ echo $throwable; }); echo "Server started at http://{$uri}\n"; $loop->run();
启动服务器
php server.php
请求对象
use Reaponse\Http\HandlerInterface; use Reaponse\Http\ResponseInterface; class TestHandler implements HandlerInterface { public function handle(ResponseInterface $response): void { //psr-7 compliant object $request = $response->request(); $response->html("Method: {$request->getMethod()}<br/>"); $response->end('Bye!'); } }
监听响应事件
use Reaponse\Http\HandlerInterface; use Reaponse\Http\Response; use Reaponse\Http\ResponseInterface; class TestHandler implements HandlerInterface { public function handle(ResponseInterface $response): void { //listens to write event $response->on(Response::ON_WRITE, function (){ echo "Writing...\n"; }); //Listens to headers event $response->on(Response::ON_HEADERS, function (){ echo "Headers...\n"; }); //Listens to next handler event $response->on(Response::ON_NEXT_HANDLER, function (){ echo "Next handler...\n"; }); //Listens to response sending event $response->on(Response::ON_BEFORE_SEND, function (){ echo "Sending...\n"; }); $response->end('Hello World'); } }
- 所有处理器必须实现 HandlerInterface
- 处理器是一个中间件,处理器只是给它起的一个好听的名字。
示例
许可证
Reaponse 是 MIT 许可的。