执行命令 $ php ./vendor/bin/easyswoole server start
实际代码执行流程如下:
- CommandRunner::getInstance()->run($caller) CommandRunner执行,$caller 封装了命令行参数
- CommandManager::getInstance()->run($caller) 命令行管理器执行 会调用 DefaultCommand\Server实行
- \EasySwoole\EasySwoole\Command\DefaultCommand\Server->start() 执行
defined('EASYSWOOLE_RUNNING')
$conf = Config::getInstance();
$serverType = 'SWOOLE_WEB'; - Core::getInstance()->createServer()->start(); 开始创建swoole http 服务
- Core 会 require EASYSWOOLE_ROOT.'/EasySwooleEvent.php'; 文件
- createServer()方法会委托 \EasySwoole\EasySwoole\ServerManager 创建实际的底层 swoole server 实例
- 重要:向底层swoole_server 对象注册事件回调 \EasySwoole\EasySwoole\Core::registerDefaultCallBack
- 设置控制器命名空间
- 设置单个控制器对象在对象池生成数量:默认500个。
- DI中注入一个Http异常处理函数
- 注册onRequest处理函数 代码:easyswoole/easyswoole/src/Core.php:260
- \EasySwoole\Http\Dispatcher::dispatch 将请求调度到具体的控制器和方法上
- \EasySwoole\Http\Dispatcher::controllerExecutor 初始化控制器
- \EasySwoole\Http\AbstractInterface\Controller::__hook 调用控制器方法
- 如果 __hook 返回一个字符串,并且这个字符串能解析成一个路径,回到 4.3.4.1 继续执行下一个控制器方法
- 清晰控制器,并回收回控制器池子
- start()会委托 \EasySwoole\EasySwoole\ServerManager->start(); 开启服务监听
- ServerManager::getInstance()->createSwooleServer($port, $serverType,.....)
总结:EasySwoole框架结构挺清晰的,阅读起来也是很轻松。框架就应该这样浅显易懂。而不是像Laravel那样层层封装和抽象。