一键协程化

作用: 相对于 Swoole1.x,Swoole4+ 提供了协程这个大杀器,所有业务代码都是同步的,但底层的 IO却是异步的,保证并发的同时避免了传统异步回调所带来的离散的代码逻辑和陷入多层回调中导致代码无法维护

之前解决方案:

针对每种类型的客户端都做了一个协程客户端

3 个问题:

  • 实现复杂,每个客户端细枝末节的协议都很复杂,想都完美的支持工作量巨大。
  • 用户需要更改的代码比较多,比如原来查询 MySQL 是用的 PHP 原生的 PDO,那么现在需要用
    Swoole\Coroutine\MySQL 的方法。
  • 我们很难覆盖到所有的操作,比如 proc_open()、sleep() 函数等等也可能阻塞住导致程序变成同步阻塞的。
现在解决方案

采用 Hook 原生 PHP 函数的方式实现协程客户端,通过一行代码就可以让原来的同步 IO 的代码变成可以协程调度的异步IO,即一键协程化。

当前可以一键协程的函数和扩展
  • redis 扩展
  • 使用 mysqlnd 模式的 pdo_mysql、mysqli 扩展,如果未启用 mysqlnd 将不支持协程化
  • soap 扩展
  • file_get_contents、fopen
  • stream_socket_client (predis、php-amqplib)
  • stream_socket_server
  • stream_select (需要 4.3.2 以上版本)
  • fsockopen
  • proc_open (需要 4.4.0 以上版本)
  • curl
当前不能一键协程的函数和扩展
  • mysql:底层使用 libmysqlclient
  • mongo:底层使用 mongo-c-client
  • pdo_pgsql
  • pdo_ori
  • pdo_odbc
  • pdo_firebird

详细可以参考:官方的一键协程化

你可能感兴趣的:(一键协程化)