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值 } }