小白兔晒黑了

导航

 

视频地址 https://www.bilibili.com/video/BV14E411t7T4?p=26&spm_id_from=pageDriver&vd_source=4a69745b599dffec877b0fcfe130b092

 

 

 

1 拆解index.php 封装 \pro\core\server\HttpServer.php

启动进程

    /**
     *
     * 此事件在worker进程、task进程启动时发生。这里创建的对象可以在进程生命周期内使用
     * @param \Swoole\Http\Server $server
     * @param int                 $workerId
     */
    public function onWorkerStart(Server $server,int $workerId)
    {
        cli_set_process_title("ttt worker"); //设置进程名称
        //把index文件里的代码搬过来
        \Core\BeanFactory::init();
        $this->dispatcher  = \Core\BeanFactory::getBean('RouterCollector')->getDispatcher();
    }

收到请求

    public function onRequset(Request $request,Response $response)
    {
    
        //匹配当前的url
        //$routeInfo = $dispatcher->dispatch($request->server['request_method'],$request->server['request_uri']);
        $myRequest = \Core\http\Request::init($request);
        $myResponse = \Core\http\Response::init($response);
    
    
        $routeInfo = $this->dispatcher->dispatch($myRequest->getMethod(),$myRequest->getUri());
        //$routeInfo返回一个数组,[表示是否注册过的路由,handle,参数]
        switch ($routeInfo[0]) {
            //有没有这个路由
            case \FastRoute\Dispatcher::NOT_FOUND:
                // ... 404 Not Found 结束响应
                $response->status(404);
                $response->end();
                break;
            //请求方式
            case \FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
                //$allowedMethods = $routeInfo[1];
                // ... 405 Method Not Allowed
                $response->status(405);
                $response->end();
                break;
        
            case \FastRoute\Dispatcher::FOUND:
                $handler = $routeInfo[1];
                $vars = $routeInfo[2];//参数
                //var_dump($vars);
                /* array(1) {
                             ["uid"]=>
                   string(3) "123"
                 }*/
                // ... call $handler with $vars
                $extVars = [$myRequest,$myResponse];
                // $vars 路由上带的参数
                // $extVars 附加参数 传入 Request 、Response对象等
                //$response->end($handler($vars,$extVars)); //最终执行的目标方法
                $ret =  $handler($vars,$extVars);
                $myResponse->setBody($ret);
                $myResponse->end();
                break;
        }
        //$response->end(showMe());
    }

 

2 封装文件监控助手

2.1 \pro\core\helper\FileHelper.php

<?php
namespace Core\helper;
class FileHelper
{
    /**
     * 获取文件监控变化
     * @param $dir         要扫描的目录
     * @param $ignore      忽略的目录     h
     *
     * @return string
     */
    public static function getFileMd5($dir,$ignore)
    {
        $files = glob($dir);
        $ret = [];
        foreach ($files as $file){
            if (is_dir($file) && strpos($file,$ignore)===false){
                //如果是文件夹,则递归,注意要加上/*,否则获取不到内容
                $ret[] = self::getFileMd5($file."/*",$ignore);
            }elseif (pathinfo($file)["extension"]=="php"){
                $ret[] = md5_file($file);
            }
        }
        return md5(implode('',$ret));//返回文件md5值
    }
    

}

完整代码

https://github.com/guainttt/seckill/commit/9196f3e92e971fb59e0c6efff307ca231eeac454#diff-f21c5ae47e384104e8a93a73378363fdd4ee21e8a97253f6ec835329fa2b2bb7

posted on 2022-07-26 01:18  小白兔晒黑了  阅读(54)  评论(0编辑  收藏  举报