1. 程式人生 > >GuzzleSwoole v1.1.0,讓 Guzzle 完美相容 Swoole 協程

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

讓 Guzzle 支援 Swoole 協程,這個專案目的就是這麼簡單明瞭!

本專案不包含 Guzzle 功能,請自行在專案中引用 Guzzle 6.x,理論上可以支援升級 Guzzle 版本而無需更新 Guzzle-Swoole!

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

v1.1.0 版本說明:

說明

眾所周知,使用 Guzzle 指定 Handler,需要在例項化 Client 時傳入。

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

Guzzle-Swoole 這個專案目前已經實現無需修改任何程式碼,只需一句話設定全域性預設處理器,完美無縫相容 Swoole 協程環境。

使用

在 Swoole >= 4.2.0 中,你可以把預設 Handler 設為 StreamHandler。

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

在 Swoole < 4.2.0 中,你可以把預設 Handler 設為本專案實現的 SwooleHandler。

\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檔案了。

程式碼倉庫