runtime.php 是 Hyperf 3.0 控制 Swoole 协程 hook 行为的核心配置文件,需存在并返回含 hook_flags 的数组;推荐设为 SWOOLE_HOOK_ALL,确保 MySQL、Redis、Curl 等 I/O 协程化。

Hyperf 3.0 的协程能力依赖 Swoole 的 hook 机制,而 runtime.php 是控制协程 Hook 行为的核心配置文件。它不负责“开启协程”(协程本身由 Swoole 启动时自动启用),而是决定哪些 PHP 原生函数调用会被自动协程化(即自动切换为非阻塞行为)。
确认 runtime.php 存在并生效
该文件路径为 config/autoload/runtime.php。若不存在,需手动创建。Hyperf 启动时会自动加载它;若文件缺失或返回值非数组,Swoole 默认 hook 行为可能不完整,导致 MySQL、Redis、Curl 等 I/O 操作仍为同步阻塞。
正确配置 hook_flags
文件内容应返回一个关联数组,其中 hook_flags 键指定要 hook 的函数类别。推荐写法如下:
-
基础必备项(强烈建议全开):
SWOOLE_HOOK_ALL—— 一次性启用全部支持的 hook 类型,覆盖文件、DNS、Socket、Curl、MySQLi、PDO、Redis 等 -
按需精细控制(生产环境可选):如只需 curl 和 redis 协程化,可设为
SWOOLE_HOOK_CURL | SWOOLE_HOOK_REDIS -
注意语法:必须使用 Swoole 扩展导出的常量,不能写字符串或数字字面量;确保 PHP 环境已加载 swoole 扩展(
php --ri swoole输出含support coroutines: enabled)
典型 runtime.php 示例
config/autoload/runtime.php
立即学习“PHP免费学习笔记(深入)”;
return [
'hook_flags' => SWOOLE_HOOK_ALL,
];
若使用 Docker 或多环境部署,可结合 APP_ENV 动态调整,例如开发环境全开、测试环境仅开 Curl 和 Redis。
验证是否生效
启动服务后,执行以下任一方式确认:
- 查看 Hyperf 启动日志,搜索
Hook flags,应显示类似Hook flags: SWOOLE_HOOK_ALL (131071) - 在代码中调用
swoole_hook_flags(),输出值应与配置一致 - 实际发起一次 Guzzle HTTP 请求或 Redis
get,观察是否不阻塞其他协程(如并发发 10 个请求,总耗时接近单次最慢响应,而非累加)



















