hhxsv5 / laravel-s

LaravelS is an out-of-the-box adapter between Laravel/Lumen and Swoole.
MIT License
3.82k stars 471 forks source link

开启了自定义进程process, 使用laravels stop命令不能关闭服务器 #450

Closed lwhdev closed 1 year ago

lwhdev commented 1 year ago

+--------------------------+---------+ | PHP | 7.3.21 | | Swoole | 4.8.1 | | LaravelS | - | | Laravel Framework [test] | 7.30.6 | 我这里发现使用了 php bin/laravels stop 只能干掉worker进程, 然后里面的自定义进程一直卡在那里,导致laravels主进程停止不了,不知道为什么,是否需要手动释放自定义的process , 但是timer 却可以自动释放 我的自定义进程代码如下

class TestProcess implements CustomProcessInterface
{
    /**
     * @var bool 退出标记,用于Reload更新
     */
    private static $quit = false;

    public static function callback(Server $swoole, Process $process)
    {

        while ($data = $process->read()) {
            $process->write('TestProcess: ' . $data);  //响应
           $count = 1;
           while ($count<=1000){
               $count++;
               DB::disconnect(); // 关闭数据库连接
               Redis::connection()->close();
           }
            \Log::info(__METHOD__, ['close mysql and redis: read data:  ',$data,$count,time()]) ;

        }
    }

// 要求:LaravelS >= v3.4.0 并且 callback() 必须是异步非阻塞程序。
    public static function onReload(Server $swoole, Process $process)
    {
        \Log::info('Test process: reloading');
        self::$quit = true;
// $process->exit(0); // 强制退出进程
    }

// 要求:LaravelS >= v3.7.4 并且 callback() 必须是异步非阻塞程序。
    public static function onStop(Server $swoole, Process $process)
    {
        \Log::info('Test process: stopping');
        self::$quit = true;
    }
}

,是不是自定进程一直运行,停止不了,请大佬指教@hhxsv5

hhxsv5 commented 1 year ago

要把self::$quit用在callback()的循环判断里面,不然一直循环啊

lwhdev commented 1 year ago

大意了.谢谢大佬