框架启动流程

一、自动加载

我们在执行如下命令的时候:

php easyswoole server start

项目目录下的easyswoole这个文件,会搜索项目目录下是是否存在composer所生成的autoload.php这个文件,用以实现psr-4自动加载,当文件不存在的时候,则终止框架启动。

二、基础常量定义

在搜索到了autoload.php文件后,框架启动脚本则会认定为已经成功注册了composer的自动加载机制,随后,会根据autoload.php的位置,进行以下几个常量的预定义。

  • IN_PHAR

    定义规则为defined('IN_PHAR') or define('IN_PHAR', boolval(\Phar::running(false))),该常量可以用于判定当前服务是否在PHAR环境中。

  • EASYSWOOLE_ROOT

    定义规则为defined('EASYSWOOLE_ROOT') or define('EASYSWOOLE_ROOT', IN_PHAR ? \Phar::running() : $realCwd),该常量用于定义当前项目所在路径的根目录,是一个绝对路径。

三、bootstrap文件引入

EasySwoole启动脚本会判断在项目根目录下,也就是EASYSWOOLE_ROOT.'/bootstrap.php'这文件如果存在,那么则会被执行一次require_once。用户可以在框架没有做任何的真实初始化之前,做自己的预处理或者是预定义。

四、启动命令解析

EasySwoole主框架定义了一个命令容器,完整命名空间为EasySwoole\EasySwoole\Command\CommandRunner,这个是一个单例对象,是对EasySwoole\Command\CommandManager对象的进一步调用封装。在对象的构造函数中,默认注册了EasySwoole自带的几个命令:

  • Install
  • PhpUnit
  • Config
  • Task
  • Crontab
  • Process
  • Server

以如下启动命令为例:

php easyswoole server start -d

-d可选,为守护启动参数

CommandRunner会执行server命令的start行为,其中,server命令的完整实现在EasySwoole\EasySwoole\Command\DefaultCommand\Server

Server主命令

server主命令被执行时,做了以下操作:

  • 判断是否指定了运行模式

    $mode = CommandManager::getInstance()->getOpt('mode');
    if(!empty($mode)){
      Core::getInstance()->runMode($mode);
    }
  • 执行框架的初始化

    Core::getInstance()->initialize()

Start行为

start行为中,做了如下两件事

  • 获取配置对象并设置运行时必须参数
  • 执行框架的最终启动

    Core::getInstance()->createServer()->start();