请求最大执行时间

优质
小牛编辑
128浏览
2023-12-01

php-fpm 中有 max_execution_time 这个选项,用来限定请求最大执行时间。

imi 提供了一个中间件,用以支持设置最大请求执行时间,如果超时可以做提前返回结果的处理。

使用方法

启用

在服务器配置 beans 节中配置中间件ExecuteTimeoutMiddleware

[
    'HttpDispatcher'    =>    [
        'middlewares'    =>    [
            'ExecuteTimeoutMiddleware',
        ],
    ],
]

超时时间设置

在服务器配置 beans 节中配置中间件ExecuteTimeoutMiddleware

[
    'ExecuteTimeoutMiddleware' =>  [
        'maxExecuteTime'    =>  3000,
        'handler'           =>  \Imi\Server\Http\Error\ExecuteTimeoutHandler::class,
    ],
]

上面的 handler 为 imi 内置的处理器,会返回一个错误状态码。

自定义超时处理器

定义一个类,实现 Imi\Server\Http\Error\IExecuteTimeoutHandler接口。

实现方法:public function handle(Request $request, Response $response)

目前 Swoole 不允许强行停止正在执行的协程,所以只是提前响应内容,而并不是中断任务执行,请知晓。