laravel的octane在启动时,相关`request`回调函数的疑问?
1. 运行环境
docker / linux
Linux: alpine3.15.0
1). 当前使用的 Laravel 版本?
"name": "laravel/framework",
"version": "v8.81.0",
2). 当前使用的 php/php-fpm 版本?
PHP 版本:8.1
3). 当前系统
Linux: alpine3.15.0
4). 业务环境
5). 相关软件版本
"laravel/octane": "^1.2"
2. 问题描述?
以下代码$server->on('request'.....)
闭包函数的$workerState参数继承自父作用域,可父作用域中没有设置workerState->worker , 那么函数体内怎么可以调用workerState->worker。
require_once __DIR__.'/WorkerState.php';
$workerState = new WorkerState;
$workerState->cacheTable = require __DIR__.'/createSwooleCacheTable.php';
$workerState->timerTable = $timerTable;
$workerState->tables = require __DIR__.'/createSwooleTables.php';
$server->on('workerstart', fn (Server $server, $workerId) =>
(fn ($basePath) => (new OnWorkerStart(
new SwooleExtension, $basePath, $serverState, $workerState
))($server, $workerId))($bootstrap($serverState))
);
$server->on('request', function ($request, $response) use ($server, $workerState, $serverState) {
$workerState->lastRequestTime = microtime(true);
if ($workerState->timerTable) {
$workerState->timerTable->set($workerState->workerId, [
'worker_pid' => $workerState->workerPid,
'time' => time(),
]);
}
$workerState->worker->handle(...$workerState->client->marshalRequest(new RequestContext([
'swooleRequest' => $request,
'swooleResponse' => $response,
'publicPath' => $serverState['publicPath'],
'octaneConfig' => $serverState['octaneConfig'],
])));
if ($workerState->timerTable) {
$workerState->timerTable->del($workerState->workerId);
}
});
3. 您期望得到的结果?
以上代码`$server->on('request'.....)`闭包函数的$workerState参数继承自父作用域,可父作用域中没有设置workerState->worker , 那么函数体内怎么可以调用workerState->worker。
推荐文章: