GuzzleSwoole v1.1.0,讓 Guzzle 完美兼容 Swoole 協程

讓 Guzzle 支持 Swoole 協程,這個項目目的就是這麼簡單明瞭!php

本項目不包含 Guzzle 功能,請自行在項目中引用 Guzzle 6.x,理論上能夠支持升級 Guzzle 版本而無需更新 Guzzle-Swoole!git

Composer:"yurunsoft/guzzle-swoole":"~1.1"github

v1.1.0 版本說明:json

說明

衆所周知,使用 Guzzle 指定 Handler,須要在實例化 Client 時傳入。swoole

這樣一來,想要把基於 Guzzle 開發的 SDK 用於 Swoole 協程環境就須要對原有 SDK 代碼進行修改。composer

Guzzle-Swoole 這個項目目前已經實現無需修改任何代碼,只需一句話設置全局默認處理器,完美無縫兼容 Swoole 協程環境。post

使用

在 Swoole >= 4.2.0 中,你能夠把默認 Handler 設爲 StreamHandler。插件

\GuzzleHttp\DefaultHandler::setDefaultHandler(\Yurun\Util\Swoole\Guzzle\SwooleHandler::class);

在 Swoole < 4.2.0 中,你能夠把默認 Handler 設爲本項目實現的 SwooleHandler。code

\GuzzleHttp\DefaultHandler::setDefaultHandler(\GuzzleHttp\Handler\StreamHandler::class);

這樣一來,實現完美無縫兼容~協程

實現原理

首先依賴了funkjedi/composer-include-files這個項目,這個項目的功能是把composer.json中配置引入的文件優先引入,這樣就能夠在這個文件裏進行提早處理

接着經過 Composer 插件機制,在post-autoload-dump事件中作處理。

讀取guzzlehttp/guzzle/src/functions.php文件,將choose_handler()方法定義從代碼中去除,把修改後內存保存爲guzzle-swoole/src/load.php文件。

guzzle-swoole/src/functions.php文件中定義了修改後的choose_handler()方法,用於實現全局默認處理器的設置和獲取。

load.phpfunctions.php兩個文件會在運行時優先引入,而後根據guzzlehttp/guzzle/src/functions_include.php中寫的判斷,Guzzle 就不會再引入他原有的functions.php文件了。

代碼倉庫

碼雲:https://gitee.com/yurunsoft/G...

Github:https://github.com/Yurunsoft/...

相關文章
相關標籤/搜索