PSR-15 中,Middleware 的设计是不是有问题啊?
按照PSR-15的文档,多个Middleware需要组合使用,得这样:
class QueueRequestHandler implements RequestHandlerInterface
{
private $middleware = [];
private $fallbackHandler;
public function __construct(RequestHandlerInterface $fallbackHandler)
{
$this->fallbackHandler = $fallbackHandler;
}
public function add(MiddlewareInterface $middleware)
{
$this->middleware[] = $middleware;
}
public function handle(ServerRequestInterface $request): ResponseInterface
{
// Last middleware in the queue has called on the request handler.
if (0 === count($this->middleware)) {
return $this->fallbackHandler->handle($request);
}
$middleware = array_shift($this->middleware);
return $middleware->process($request, $this);
}
}
按照这个设计,每个请求都得重新来一个QueueRequestHandler?因为$this->middleware在请求处理完成后,就变成空的了。
在fpm环境中,每个请求重新来一个QueueRequestHandler是合适的,而且也是必须的。
但是在swoole环境中、在cli监听端口环境中,每个请求都重新建立一个QueueRequestHandler,即没有必要,而且也很昂贵。这种框架基础层的东西,是不是应该和request的生命周期独立?
推荐文章: