协程

Swoole原始文档

  • 警告:协程下代码执行顺序是乱序的,请求级的数据应该以协程ID隔离,但Laravel/Lumen中存在很多单例、静态属性,不同请求间的数据会相互影响,这是不安全的。比如数据库连接就是单例,同一个数据库连接共享同一个PDO资源,这在同步阻塞模式下是没问题的,但在异步协程下是不行的,每次查询需要创建不同的连接,维护不同的IO状态,这就需要用到连接池。所以不要打开协程,仅自定义进程中可使用协程。

  • 启用协程,默认是关闭的。

    1. // 修改文件 `config/laravels.php`
    2. [
    3. //...
    4. 'swoole' => [
    5. //...
    6. 'enable_coroutine' => true
    7. ],
    8. ]
  • 协程客户端:需Swoole>=2.0

  • 运行时协程:需Swoole>=4.1.0,同时启用下面的配置。

    1. // 修改文件 `config/laravels.php`
    2. [
    3. //...
    4. 'enable_coroutine_runtime' => true
    5. ]