ITPub博客

首页 > IT职业 > IT生活 > SWOOLE 从入门到放弃之写个小框架(二十)

SWOOLE 从入门到放弃之写个小框架(二十)

IT生活 作者:canyoumail 时间:2021-09-09 09:11:36 0 删除 编辑

接下来,要编写启动类。为什么要单独在这说呢,是因为在启动前,程序要检查一些内容:
第一,PHP版本和SWOOLE版本是不是符合我们在 SWOOLE 从入门到放弃之写个小框架(一) 中规定的 PHP7.1和 SWOOLE 2.1
第二,限制本框架必须是在CLI模式下运行,
第三,检查配置信息是否完整,
第四,一些必须的目录,比如LOG目录是否已创建
第五,检查传入的参数是否正确

修改frame/base.php

首先,保留以下代码

//定义框架路径
define ('PIZ_PATH',__DIR__.'/');
//Config文件目录
define ('CONFIG_PATH',dirname (__DIR__).'/config/');
//Logs路径
define('LOG_PATH',dirname (__DIR__).'/logs/');
//引入加载器文件
require_once PIZ_PATH."Lib/Loader.php";
//引入助手文件
require_once PIZ_PATH."helper.php";
//注册它
PizLoader::register ();

首先,为了方便启动类通过一些外部SHELL命令来检查运行状态,我把frame/Lib/Server.php做了一个改造,详见代码 https://gitee.com/pizzzz/piz/blob/master/frame/Lib/Server.php

接下来,编写启动类代码。
该类只有一个run方法,只传一个参数$opt,$opt可选值start,stop,kill,restart,reload

PHP版本和SWOOLE版本用phpversion来获取 version_compare对比
php_sapi_name 来判断运行模式
检查¥opt是否合法
接下来就是拉配置self::$config = config('app');

注册项目命名空间和路径PizLoader::addNamespace (config('app.namespace'),config('app.path'));
检查日志目录!is_dir(LOG_PATH) && mkdir(LOG_PATH,0777 ,TRUE);
检查app.name

if (version_compare(phpversion(), '7.1', '= $timeout) {
                            echo "{$app_name} 停止失败" , PHP_EOL;
                            exit;
                        }
                        usleep(10000);
                        continue;
                    }
                    echo "{$app_name} 已停止" , PHP_EOL;
                    break;
                }
                exit(0);
                break;
            case 'reload':
                //详见:https://wiki.swoole.com/wiki/page/20.html
                // SIGUSR1: 向主进程/管理进程发送SIGUSR1信号,将平稳地restart所有worker进程
                posix_kill($manager_pid, SIGUSR1);
                echo "[SYS]","t", "{$app_name} 重载" , PHP_EOL;
                exit;
            case 'restart':
                echo "{$app_name} 正在停止" , PHP_EOL;
                // 发送SIGTERM信号,主进程收到SIGTERM信号时将停止fork新进程,并kill所有正在运行的工作进程
                // 详见 https://wiki.swoole.com/wiki/page/908.html
                $master_pid && posix_kill($master_pid, SIGTERM);
                $timeout = 40;
                $start_time = time();
                while (1) {
                                                      //检查master_pid是否存在
                    $master_is_alive = $master_pid && posix_kill($master_pid, 0);
                    if ($master_is_alive) {
                        if (time() - $start_time >= $timeout) {
                            echo "{$app_name} 停止失败" , PHP_EOL;
                            exit;
                        }
                        usleep(10000);
                        continue;
                    }
                    echo "{$app_name} 已停止" , PHP_EOL;
                    break;
                }

                break;
        }

        self::$worker = PizServer::get_instance ();
        self::$worker->set_config (self::$config);
        echo "{$app_name}", ' 启动成功',PHP_EOL;
        self::$worker->run();

详见代码 https://gitee.com/pizzzz/piz/blob/master/frame/base.php

修改 /start.php 代码

php start.php start 启动运行

小伙伴们自己看效果吧。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3005/viewspace-2800297/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-13

  • 博文量
    76
  • 访问量
    464