mix/guzzle

This package is abandoned and no longer maintained. No replacement package was suggested.

Guzzle that support the Swoole coroutine

v2.2.17 2021-11-04 04:12 UTC

This package is auto-updated.

Last update: 2022-08-04 05:53:33 UTC


README

注意:Swoole 已经推出内置 SWOOLE_HOOK_NATIVE_CURLSWOOLE_HOOK_CURL 功能,请使用官方提供的 Hook 功能,本项目将停止维护。

Mix Guzzle

支持 Swoole 协程的 Guzzle, 可无感 Hook 第三方库,同时支持调低 PHP 错误级别

安装

注意:安装后整个项目的 Guzzle 默认 CurlHandler 将会替换为该项目的 StreamHandler,实现了无感 Hook

使用 Composer 安装:

composer require mix/guzzle

使用

根据 Guzzle 官方文档使用即可:

$client   = new \GuzzleHttp\Client();
$response = $client->get('https://www.baidu.com/');

也可以手动指定 handler 如下:

$handler = new \Mix\Guzzle\Handler\StreamHandler();
$stack   = \GuzzleHttp\HandlerStack::create($handler);
$client  = new \GuzzleHttp\Client([
    'handler'  => $stack,
]);

Elasticsearch PHP 支持

安装后 GuzzleHttp\Ring 的 CurlHandler 将会替换为该项目的 Ring\StreamHandler,实现了无感 Hook

根据 Elasticsearch PHP 官方文档使用即可:

use GuzzleHttp\Ring\Client\StreamHandler;
use Elasticsearch\ClientBuilder;

$handler = new StreamHandler();
$builder = ClientBuilder::create();
$builder->setHosts(['127.0.0.1:9200']);
$builder->setHandler($handler);
$client = $builder->build();

原理

因为 Swoole 的 Hook 只支持 PHP Stream,Guzzle 库默认是使用 CURL 扩展,而 Swoole 不支持在协程中使用 CURL,因此本库将 Guzzle 默认的 CurlHandler 替换为 StreamHandler,并做了一些协程优化处理,让依赖 Guzzle 的第三方库无需修改代码即可使用 Swoole 协程。

支持的第三方库

理论上基于 Guzzle 库开发的 SDK 都可使用本库 Hook,下面是已知的支持 Hook 的第三方库清单:

欢迎提交 PR 更新此清单

License

Apache License Version 2.0, http://www.apache.org/licenses/