使用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维持了两个连接,同样实现了连接复用