当前位置:  首页>> 技术小册>> Swoole高性能框架-Hyperf

框架生命周期

Hyperf 是运行于 Swoole 之上的,想要理解透彻 Hyperf 的生命周期,那么理解 Swoole 的生命周期也至关重要。

Hyperf 的命令管理默认由 symfony/console提供支持(如果您希望更换该组件您也可以通过改变 skeleton 的入口文件更换成您希望使用的组件),在执行 php bin/hyperf.php start 后,将由 Hyperf\Server\Command\StartServer 命令类接管,并根据配置文件 config/autoload/server.php 内定义的 Server 逐个启动。

默认启动了httpServer,并监听9501端口:

  1. <?php
  2. declare(strict_types=1);
  3. use Hyperf\Server\Event;
  4. use Hyperf\Server\Server;
  5. use Swoole\Constant;
  6. return [
  7. 'mode' => SWOOLE_PROCESS,
  8. 'servers' => [
  9. [
  10. 'name' => 'http',
  11. 'type' => Server::SERVER_HTTP,
  12. 'host' => '0.0.0.0',
  13. 'port' => 9501,
  14. 'sock_type' => SWOOLE_SOCK_TCP,
  15. 'callbacks' => [
  16. Event::ON_REQUEST => [Hyperf\HttpServer\Server::class, 'onRequest'],
  17. ],
  18. ],
  19. ],
  20. 'settings' => [
  21. Constant::OPTION_ENABLE_COROUTINE => true,
  22. Constant::OPTION_WORKER_NUM => swoole_cpu_num(),
  23. Constant::OPTION_PID_FILE => BASE_PATH . '/runtime/hyperf.pid',
  24. Constant::OPTION_OPEN_TCP_NODELAY => true,
  25. Constant::OPTION_MAX_COROUTINE => 100000,
  26. Constant::OPTION_OPEN_HTTP2_PROTOCOL => true,
  27. Constant::OPTION_MAX_REQUEST => 100000,
  28. Constant::OPTION_SOCKET_BUFFER_SIZE => 2 * 1024 * 1024,
  29. Constant::OPTION_BUFFER_OUTPUT_SIZE => 2 * 1024 * 1024,
  30. ],
  31. 'callbacks' => [
  32. Event::ON_WORKER_START => [Hyperf\Framework\Bootstrap\WorkerStartCallback::class, 'onWorkerStart'],
  33. Event::ON_PIPE_MESSAGE => [Hyperf\Framework\Bootstrap\PipeMessageCallback::class, 'onPipeMessage'],
  34. Event::ON_WORKER_EXIT => [Hyperf\Framework\Bootstrap\WorkerExitCallback::class, 'onWorkerExit'],
  35. ],
  36. ];

关于依赖注入容器的初始化工作,我们并没有由组件来实现,因为一旦交由组件来实现,这个耦合就会非常的明显,所以在默认的情况下,是由入口文件来加载config/container.php 来实现的。

请求与协程生命周期

Swoole 在处理每个连接时,会默认创建一个协程去处理,主要体现在 onRequest、onReceive、onConnect 事件,所以可以理解为每个请求都是一个协程,由于创建协程也是个常规操作,所以一个请求协程里面可能会包含很多个协程,同一个进程内协程之间是内存共享的,但调度顺序是非顺序的,且协程间本质上是相互独立的没有父子关系,所以对每个协程的状态处理都需要通过 协程上下文 来管理。