讓 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.php
和functions.php
兩個文件會在運行時優先引入,而後根據guzzlehttp/guzzle/src/functions_include.php
中寫的判斷,Guzzle 就不會再引入他原有的functions.php
文件了。