use GuzzleHttp\Client;
use GuzzleHttp\Handler\CurlMultiHandler;
use GuzzleHttp\HandlerStack;
use Psr\Http\Message\ResponseInterface;
$curl = new CurlMultiHandler;
$handler = HandlerStack::create($curl);
$client = new Client(['handler' => $handler]);
$client
->getAsync('http://google.com')
->then(
function (ResponseInterface $res) {
echo 'response: ' . $res->getStatusCode() . PHP_EOL;
},
function (\Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
)
// ->wait()
;
$curl->tick();
echo 'bottom' . PHP_EOL;
使用guzzle
发送异步请求返回的promise
调用 then
方法不会立即执行, 还必须要调用wait
去等待所有的请求结束,才会执行这样整个文件的输出还是会被block
,那这里的异步具体指的是什么?
谢邀。
以下是个人想法,不一定对。
你可以访问 baidu.com | google.com 看看效果。
同步的写法是 1、baidu.com 返回结果了 =》2、去请求 google.com 等待返回结果
异步是 同时 访问 baidu.com | google.com ,不用被另一个请求卡住。
这就是区别。
作为整个程序来说,肯定是要全部执行完才会结束。