## PHP Stream Hook Swoole 在 4.1.0 后支持了该项技术,就是直接在底层将使用 PHP Stream 的代码与扩展,通过 Hook 的方式,让其支持协程。 ## 手动开启 Hook: 建议在主函数的第一行执行 `Mix\Core\Coroutine::enableHook()`,这样可获得 100% 覆盖效果,该方法做了处理,多次调用不会有损耗。 ``` /** * 主函数 */ public function main() { \Mix\Core\Coroutine::enableHook(); xgo(function () { // ... }); Event::wait(); } ``` ## 支持 Hook 的 PHP 方法 > socket 相关,文件相关,sleep相关,pdo/redis 相关基本上都已经支持。 [>> 去 Swoole 官网查看完整可用列表 <<](https://wiki.swoole.com/wiki/page/p-runtime.html) ## 默认开启 Hook 的类 框架中的以下类只可在协程中使用,而且使用的是 Swoole 的 Hook 技术,默认已经在该类的初始化事件中开启了 Hook,因此无需手动开启: - [Mix\Database\Coroutine\PDOConnection](https://github.com/mix-php/mix-database/blob/master/src/Coroutine/PDOConnection.php) - [Mix\Redis\Coroutine\RedisConnection](https://github.com/mix-php/mix-redis/blob/master/src/Coroutine/RedisConnection.php)