场景:处理大量的拉取查询同步数据时,一次请求需要等待很久,操作体验不好,在这种情况下要优化进行并发请求,请注意所请求接口的每秒并发数进行优化,对请求结果进行日志记录
1、composer require guzzlehttp/guzzle
2、$userIds为数据列表,yield关键词表示先将请求生成,但是不返回,创建pool实例时可以设置并发数对请求进行并发请求并返回结果
use GuzzleHttp\Client; use GuzzleHttp\Pool;
$userIds = []; $requests = function ($userIds) use ($client) { foreach ($userIds as $userId) { yield function() use ($client,$userId) { return $client->getAsync($url); }; } };
// 创建一个 Pool 实例 $pool = new Pool($client, $requests($userIds), [ 'concurrency' => 10, 'fulfilled' => function ($response, $index) use ($logger,$users) { // 请求成功的回调 echo '返回时间:'.date('Y-m-d H:i:s').'返回参数:'.$response->getBody(); $data = json_decode($response->getBody(), true); }, 'rejected' => function (RequestException $reason, $index) use ($logger) { }, ]); // 开始发送请求 $promise = $pool->promise(); $promise->wait();
3、更多内容参考文档:概述 — Guzzle中文文档