php Guzzle,非同步請求的重要性

m53469發表於2021-09-09

近期在寫php介面開發,一個php檔案裡需要請求多個第三方介面,就在測試的時候列印耗時居然達到了1000ms!(一共需要請求四個第三方介面);
也在群友推薦接觸到了guzzle類;能實現多個請求非同步進行(好像是偽非同步,懶得深究);
我用tp5寫了個測試,guzzle和file_get_contents各請求四次,並且列印耗時,結果很明顯
guzzle手冊:

多次測試結果
guz:300ms----fgc:845ms
guz:265ms----fgc:743ms
guz:277ms----fgc:789ms
guz:272ms----fgc:690ms
namespace appopencontroller;use thinkRequest;use thinkModel;use GuzzleHttpClient;use GuzzleHttpPromise;class Index{    public function index(){list($msec, $sec) = explode(' ', microtime());
$time=(float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    $client = new Client(['base_uri' => '']);// Initiate each request but do not block$promises = [    'image' => $client->getAsync('%7B%22itemNumId%22%3A%22568914501203%22%7D'),    'png'   => $client->getAsync('%7B%22itemNumId%22%3A%22568914501203%22%7D'),    'jpeg'  => $client->getAsync('%7B%22itemNumId%22%3A%22568914501203%22%7D'),    'webp'  => $client->getAsync('%7B%22itemNumId%22%3A%22568914501203%22%7D')
];

$results = Promiseunwrap($promises);list($msec, $sec) = explode(' ', microtime());
$time2=(float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);


$client=file_get_contents('%7B%22itemNumId%22%3A%22568914501203%22%7D');
$client=file_get_contents('%7B%22itemNumId%22%3A%22568914501203%22%7D');
$client=file_get_contents('%7B%22itemNumId%22%3A%22568914501203%22%7D');
$client=file_get_contents('%7B%22itemNumId%22%3A%22568914501203%22%7D');list($msec, $sec) = explode(' ', microtime());
$time3=(float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);echo 'guz:';echo $time2-$time;echo 'ms';echo '----';echo 'fgc:';echo $time3-$time2;echo 'ms';
    }
}?>````



作者:阿哇哥哥
連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2819/viewspace-2804974/,如需轉載,請註明出處,否則將追究法律責任。

相關文章