Swoole 框架最佳实践

Swoole 是一种常驻内存进程 Reactor 模式的框架。

支持 Swoole 的 Web 框架:

  1. Laravel-Swoole
  2. Laravel-S
  3. Swoft
  4. Hyperf
  5. One
  6. EasySwoole

1 和 2 可以让 Swoole 支持 Laravel 框架;个人更倾向于 Hyperf;Swoft 很好,但也很重,如果要使用Swoft,不如考虑换个技术栈,比如 Java 或 Python。

优点

  1. 高性能
    TechEmpower Framework Benchmarks 的测试中完胜 Node.js。

  2. 支持 Coroutine
    Coroutine 可以将步代码转换成异步执行,而不需要通过回调,也远比 Node.js 的 async/await 优雅。

  3. 支持 channel
    光这点已经可以媲美 golang 了。

缺点

  1. 内存泄露
    通过 max_request 设置 Worker 进程的生命周期,也可以通过设置 PHP 的 memory_limit 来限制进程的内存使用,超出内存使用限制的 PHP 进程会退出,然后 Manager 进程会重新拉起一个新的 Worker 进程(Manager 进程不运行 PHP 代码,所以不会内存泄露)。

  2. 代码热更新
    官方没有提供解决方案,需要自己动手实现。

  3. 兼容性
    Swoole 的运行模式并非 PHP 原生模式,所以并不能保证所有的 PHP 扩展的第三方库能够完美兼容。Swoole 支持的数据库只有 MySQL 和 Postgresql,另外缓存也仅支持 Redis,不过说实话也够用了,如果需要支持其他外部服务,完全可以通过 Agent 模式来实现。

总结

Swoole 不适合作为直接处理用户请求的 Web 框架,用来作为后端任务处理器会更加适合。总的来说,Swoole 框架目前的设计还是挺先进,奈何绑定在 PHP 这个平台上,可惜了。