hyperf 中 guzzle 连接池的最大连接数由配置文件 config/autoload/http_client.php 中的 max_connections 字段定义,默认为 30;运行时需通过 connectionpool 实例调用 getstats() 获取 created、allocated 等实时统计信息,guzzle 客户端本身不维护连接状态。

Hyperf 中 Guzzle 连接池的连接数不是通过 Guzzle 客户端对象直接获取的,而是由 Hyperf 的 ConnectionPool 统一管理。你需要从连接池实例中获取当前活跃/空闲连接状态,而非 Guzzle 本身。
查看连接池配置中的最大连接数
最大连接数在配置文件中定义,路径通常为 config/autoload/http_client.php:
'pool' => [
'max_connections' => 30,
'min_connections' => 5,
'connect_timeout' => 5.0,
'wait_timeout' => 3.0,
'heartbeat' => -1,
],
其中 max_connections 就是该 Guzzle 连接池允许的最大并发连接数。
运行时获取连接池当前使用情况
可通过依赖注入获取 ConnectionPool 实例并调用其方法:
- 使用
Hyperf\Pool\ConnectionPool对应的 pool name(默认为default或你在配置中指定的名称) - 调用
getStats()方法获取统计信息
示例代码:
use Hyperf\Pool\ConnectionPool;
use Hyperf\Utils\ApplicationContext;
$pool = ApplicationContext::getContainer()->get(ConnectionPool::class);
$stats = $pool->getStats(); // 注意:需传入具体 pool 名称,如 'guzzle'
// 若你配置的 pool 名为 'guzzle',应这样获取:
// $pool = ApplicationContext::getContainer()->get('guzzle.pool');
$stats = $pool->getStats();
var_dump($stats);
输出类似:
[ 'created' => 12, 'allocated' => 8, 'waiting' => 0, 'max_created' => 30, ]
关键字段说明:
-
created:当前已创建的连接总数(包括空闲和正在使用的) -
allocated:当前被客户端占用的连接数(即活跃连接数) -
waiting:正在等待连接的协程数 -
max_created:历史最高创建连接数(不等于配置的 max_connections,但不会超过它)
确认 Guzzle 使用的是哪个连接池
Hyperf 的 Hyperf\HttpClient\HttpClient 默认使用名为 default 的连接池;如果你为 Guzzle 单独配置了 pool(如在 http_client.php 中设置了 'pool' => ['name' => 'guzzle']),则需用对应名称获取池实例:
- 配置中指定了
'pool' => ['name' => 'guzzle']→ 获取'guzzle.pool' - 未指定 name,默认使用
'default.pool'
可通过 ApplicationContext::getContainer()->has('guzzle.pool') 判断是否存在自定义池。
注意:Guzzle 实例本身不暴露连接数
Guzzle 的 Client 对象是无状态的,真正管理连接的是 Hyperf 底层的 ConnectionPool。不要尝试调用 $client->getConfig('handler') 去查连接,那只是 Handler 实例,不反映运行时连接池水位。











