一、核心概念类
-
Swoole与PHP-FPM的区别
- Swoole采用常驻内存+事件驱动模式,支持异步非阻塞IO;PHP-FPM基于短生命周期CGI模式,每次请求需重新初始化
- 典型应用场景:Swoole适合长连接服务(如IM、游戏服务器),PHP-FPM适合传统Web短连接业务
-
协程实现原理
- 基于C栈切换实现用户态线程,单进程可支持数万协程并发
- 对比Go协程:Swoole协程由PHP扩展层调度,Go由语言运行时调度
二、底层原理类
-
Swoole的进程模型
Master进程 → Manager进程 → Worker进程(含协程调度) ↘ TaskWorker进程(异步任务处理)
- Master负责事件监听,Manager管理Worker生命周期,Worker处理业务逻辑
- 进程间通信通过Unix Socket管道实现
-
Reactor模式实现
- 主Reactor监听连接事件,Sub Reactor处理网络IO,搭配多线程/多进程提高吞吐量
- 对比Nginx:Swoole将Reactor与Worker绑定,减少进程切换开销
三、实战应用类
-
连接池实现要点
- 预创建MySQL/Redis连接对象,通过
chan
实现协程安全分配 - 需处理断线重连和心跳维护,示例代码:
$pool = new Swoole\Coroutine\Channel(10); for ($i=0; $i<10; $i++) { $pool->push(new Redis()); }
- 预创建MySQL/Redis连接对象,通过
-
常见性能优化手段
- 启用
enable_coroutine
自动协程化同步阻塞API - 合理设置worker_num(建议CPU核数*2)和task_worker_num
- 避免在Worker中执行耗时操作,应投递到TaskWorker
- 启用
四、进阶问题类
-
协程内存泄漏排查
- 使用
swoole_last_error()
检查协程栈未正常退出 - 典型场景:未正确关闭文件句柄或未释放全局变量引用
- 使用
-
Swoole与Hyperf框架整合
- 注解路由通过AOP实现,依赖注入容器管理生命周期
- 中间件采用洋葱模型,支持全局和局部中间件