使用GuzzleHttp/Client实现连接复用,加速请求

来源:赵克立博客 分类: PHP 标签:PHPphp扩展抓包发布时间:2023-05-30 16:41:35最后更新:2023-05-30 17:00:32浏览:1229
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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

下面是不使用静态客户端的效果,每个接口的请求都会有连接和关闭

2305301685436872493278.png

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

2305301685436908509266.png

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

2305301685436950992728.png

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


微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python