我的慢速慢功能需要大约20秒才能运行,HTTP请求需要3.4秒才能运行。
我想:
如果HTTP请求是异步完成的,则步骤1& 3应该几乎没有时间完成。
我使用了以下代码:
$client = new Client();
$promise = $client->getAsync('http://www.fakeresponse.com/api/?sleep=3')->then(
function (ResponseInterface $res) {
return \GuzzleHttp\json_decode($res->getBody()->getContents(), true);
},
function (RequestException $e) {
throw $e;
}
);
// Slow function
$start = microtime(true);
$this->slowFunction(); // ~20s
dump($end);
$start = microtime(true);
$promise->wait();
$end = microtime(true) - $start;
dump($end); // Should be 0 if running async
输出了什么:
19.018649101257
3.3757498264313
这意味着第3步需要大约3.4秒才能运行,这意味着->getAsync
没有触发HTTP请求。它会在->wait
上启动它。
如何异步触发HTTP请求?
答案 0 :(得分:0)
你可以使用pthreads lib来解决与php异步的问题,作为使用示例:
<?php
class MyThread extends Thread{
public $promise;
public $terminated;
public function __construct($promise) {
$this->terminated=false;
$this->promise=$promise;
}
public function run(){
$this->promise->wait();
$this->terminated=true;
}
}
$client = new Client();
$promise = $client->getAsync('https://www.foaas.com/version')->then(
function (ResponseInterface $res) {
return \GuzzleHttp\json_decode($res->getBody()->getContents(), true);
},
function (RequestException $e) {
throw $e;
}
);
$start = microtime(true);
print $start;
$thread = new MyThread($promise);
while(!$thread->terminated){
usleep(1);
}
$end = microtime(true) - $start;
print " - ".$end;