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