upscale/swoole-reflection

Swoole web-server 的反射 API

3.1.0 2023-06-12 19:37 UTC

This package is auto-updated.

Last update: 2024-09-12 22:16:06 UTC


README

此库为 Swoole / Open Swoole web-server 的类提供 Reflection API

特性

  • 服务器中间件操作
  • 响应生命周期跟踪

安装

该库应通过 Composer 作为依赖项安装

composer require upscale/swoole-reflection

用法

中间件操作

可选地覆盖服务器中间件,并重新使用原始回调

$server = new \Swoole\Http\Server('127.0.0.1', 8080);
$server->on('request', function ($request, $response) {
   $response->end("Served by Swoole server\n");
});

$reflection = new \Upscale\Swoole\Reflection\Http\Server($server);
$middleware = $reflection->getMiddleware();
$reflection->setMiddleware(function ($request, $response) use ($middleware) {
   $response->header('Content-Type', 'text/plain');
   $middleware($request, $response);
});

$server->start();

响应生命周期

头部跟踪

在发送之前修改响应头部

$server->on('request', function ($request, $response) {
    $callback = function () use ($request, $response) {
        $response->header('Content-Type', 'text/plain');
    };
    $response = new \Upscale\Swoole\Reflection\Http\Response\Observable($response);
    $response->onHeadersSentBefore($callback);    
    $response->end("Served by Swoole server\n");
});

在第一次调用 \Swoole\Http\Response::write/end/sendfile() 时,回调将在每个请求上被调用。

警告!需要修改响应的回调必须使用原始响应而不是其可观察代理。依赖于可观察代理会在代理及其内部注册的回调之间创建循环引用。涉及孤立的循环交叉引用的实例将不会被销毁,直到下一次垃圾回收周期。Swoole 在请求完成时调用响应析构函数中的 \Swoole\Http\Response::end()。如果响应析构函数没有被调用,则工作进程将挂起而不会发送响应。

拦截体

在发送之前修改响应体

$server->on('request', function ($request, $response) use ($server) {
    $response = new \Upscale\Swoole\Reflection\Http\Response\Observable($response);
    $response->onBodyAppend(function (&$content) use ($server) {
        $content .= "<!-- Served by worker {$server->worker_id} -->\n";
    });
    $response->header('Content-Type', 'text/html');
    $response->end("Served by <b>Swoole server</b>\n");
});

在每次调用 \Swoole\Http\Response::write/end() 并带有非空内容时,都会调用回调。

贡献

欢迎提交包含修复和改进的拉取请求!

许可证

版权所有 © Upscale Software。保留所有权利。

根据Apache 许可证 2.0 版本授权。