使用GuzzleHttp/Client实现连接复用,加速请求
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2023-05-30 17:00:32
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章
前言
我们使用GuzzleHttp/Client用于随机的请求时, 可以我忽略连接是否能复用的问题,但如果用于某一个特定向的大批量访问时,连接保持就显的优为重要,因为每次请求完关闭,再用再打开连接浪费的都是时间。
连接保持测试
GuzzleHttp/Client 底层是支持连接复用的,无图无真像,下面我们来抓包看下具体的请求数据
使用php的类静态变量来保存一个客户端,所有请求都用这一个客户端,核心代码如下
/**
* 实例客户端,可连接复用
* @var Client|null
*/
protected static ?Client $httpClient = null;
// 在需要执行请求的地方使用下面代码
if (!self::$httpClient) {
self::$httpClient = new Client($options);
}
$response = self::$httpClient->request('POST', $url, array_merge(['body' => ''], []));首先是只请求一个网关地址的多个接口,比如淘宝的sdk网关地址 eco.taobao.com
下面是不使用静态客户端的效果,每个接口的请求都会有连接和关闭

下面是使用静态客户端的效果,只有一次连接,所有接口都使用了这一个连接

那么同一个客户端,请求两个网关地址(淘宝,抖音)是什么效果呢,淘宝,抖音网关地址为eco.taobao.com,openapi-fxg.jinritemai.com,分别请求两个网关地址的多个接口的情况,如下图

它自动根据连接的远程ip维持了两个连接,同样实现了连接复用