php guzzle发送异步请求问题
阿神
阿神 2017-04-10 18:00:32
[PHP讨论组]
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,那这里的异步具体指的是什么?

阿神
阿神

闭关修行中......

全部回复(1)
伊谢尔伦

谢邀。
以下是个人想法,不一定对。

你可以访问 baidu.com | google.com 看看效果。
同步的写法是 1、baidu.com 返回结果了 =》2、去请求 google.com 等待返回结果
异步是 同时 访问 baidu.com | google.com ,不用被另一个请求卡住。
这就是区别。

作为整个程序来说,肯定是要全部执行完才会结束。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号