1: 守护进程概述
Phlo Daemon 是一个可选的 Node sidecar(phlo-daemon.js),它在一组常驻工作者上运行任何 Phlo 目标。它是一个通用引擎:它对 WebSockets、任务或任何特性一无所知。Phlo Realtime 和调度器内置于守护进程中;运行时助手通过本地 HTTP 访问它。核心 Phlo 在没有它的情况下也能工作;守护进程是使重路径快速并支持长时间运行服务的层。

1.1: Phlo 运行代码的三种方式
在 Phlo 应用中的每个例程都是一个可调用的目标(Class::method、object.method 或一个裸露的 function)。它实际上有三种执行方式:
| 模式 | 发生的事情 | 何时 |
|---|---|---|
| 进程内 | 在当前请求中进行普通的函数或方法调用。没有新进程。 | 正常情况:routes、views、models。 |
| 一次性 CLI | 一个新的 php app.php <target> 进程启动应用,运行并退出。 |
从 cron、部署脚本或没有守护进程的 async helper 调用的目标。每次调用一个启动。 |
| 池化工作者 | 一个常驻工作者(由守护进程启动)曾经启动过应用并通过管道响应调用。没有每次调用的启动。 | 当守护进程运行时,相同的目标。 |
第一种情况只是 PHP。第二种和第三种是以带外方式运行的相同目标;唯一的区别在于每次是否启动一个新的进程(一次性)或重用一个热工作者(池)。守护进程将一次性路径转换为池化路径。
1.2: 为什么这是可选的
一键路径意味着没有任何硬性依赖于守护进程。Async helpers 会回退到子进程;任务会回退到 cron;一个仅提供 HTTP 的应用根本不需要它。因此,您可以在没有守护进程的情况下进行开发和部署,并在启动成本或实时性重要的地方开启它,而无需更改您的应用代码。
当一个应用需要时,运行守护进程:
- 需要 WebSockets(Phlo Realtime 将每个 socket 事件分发给它),
- 调度任务而没有 cron 条目,或
- 有一个 热路径,分发到每个请求的多个应用调用(在这种情况下,为每个调用启动一个进程将占主导地位)。
1.3: 你连接的是什么
- 一个小的配置文件,要求
phlo-daemon.js,包括端口、PHP 二进制文件、任何计划任务,以及 websocket 主机→应用映射(第四个参数);应用不会自我注册。 - 可选地在应用入口点中使用
daemon常量,以将其运行时助手路由到池中。 - 在进程管理器下运行(pm2、systemd、supervisord)。
phlo-daemon 仓库 是源代码,而指南的 Daemon 章节 是密集的技术参考。