依赖注入 自定义进程和正常请求两者通过Container::get获取的实例不是一个实例?

墨鱼

问题描述

如题

composer.json(仅有require)

"php": ">=8.1",
    "workerman/webman-framework": "^2.1",
    "monolog/monolog": "^2.0",
    "workerman/crontab": "^1.0",
    "psr/container": "1.1.1",
    "php-di/php-di": "6.3",
    "doctrine/annotations": "1.14",
    "webman/think-orm": "^2.1"

config/dependence.php

return [
    \app\service\timingWheel\HierarchicalTimingWheel::class => new \app\service\timingWheel\HierarchicalTimingWheel(1, [60, 24, 30, 12])
];

config/container.php

$builder = new \DI\ContainerBuilder();
$builder->addDefinitions(config('dependence', []));
$builder->useAutowiring(true);
$builder->useAnnotations(true);
return $builder->build();

config/process.php

'timingWheel' => [
        'handler' => app\process\TimingWheelTick::class,
    ]

TimingWheelTick

class TimingWheelTick
{

    static function onWorkerStart(Worker $worker)
    {

        var_dump(spl_object_hash(Container::get(HierarchicalTimingWheel::class)), __CLASS__);
        return;
    }
}

控制器中的逻辑跟自定义进程一样

控制台输入

string(32) "000000000000002a0000000000000000"
string(27) "app\process\TimingWheelTick"
string(32) "000000000000002b0000000000000000"
string(30) "app\controller\WheelController"

如上 2a是自定义进程输出的 2b是控制器输出的

两者内存不共享?所以实例是两份?

89 1 0
1个回答

10bang

进程之间隔离

×
🔝