EasySwoole Http 服务 server start 代码执行流程解析

执行命令 $ 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那样层层封装和抽象。

Leave a Comment

Your email address will not be published. Required fields are marked *

PHP 8.1.1 - 28.050 ms, 0 Q