php guzzle 并行请求接口

1,831 阅读1分钟

composer require "guzzlehttp/guzzle: 5.3.1"

use GuzzleHttp\Pool;
use GuzzleHttp\Message\Response;
$requests = [];
$url = 'http://xxxx.com';
$url2 = "http://xxx2.com";
$client = new Client();
$request = $client->createRequest('get', $url, ["timeout"=>1,"connect_timeout"=>1]);
$request2 = $client->createRequest('get', $url2, ["timeout"=>1,"connect_timeout"=>1]);
$requests[] = $request;
$requests[] = $request2;
$results = Pool::batch($client, $requests);
if(!$results->getResult($request) instanceof Response && !$results->getResult($request2) instanceof Response){
    return [];
}

if($results->getFailures()){
    $data = [];
    $data2 = [];
}else{
    $data = $results->getResult($request)->json();
    $data2 = $results->getResult($request2)->json();
}

return [$data,$data2];

异步请求

try{
    $client = new Client();
    $req = $client->createRequest('GET', 'http://xxx.com?', ['future' => true,"timeout"=>1,"connect_timeout"=>1]);
    $client->send($req)->then(function ($response){
    //dump($response->json());
    });
} catch (\Exception $e){

}

Guzzle 源码分析