Guzzle中的异步请求
使用Guzzle发起异步请求
Guzzle是一个PHP的HTTP客户端,它在发起http请求时不仅可以同步发起,还可以异步发起。
$client = new Client();
$request = new Request('GET', 'http://www.baidu.com');
$promise = $client->sendAsync($request)->then(function ($response) {
echo $response->getBody();
});
// todo something
echo 1;
$promise->wait();
PHP发起HTTP请求的几种方式
curl
使用libcurl库,允许你与各种的服务器使用各种类型的协议进行连接和通讯。
stream
通过流的方式获取和发送远程文件,该功能需要ini配置allow_url_fopen=on。关于php的流更多参考PHP流(Stream)的概述与使用详解
在guzzle中可以兼容使用这两种的任意一种或者是用户自定义的http handler
function choose_handler()
{
$handler = null;
if (function_exists('curl_multi_exec') && function_exists('curl_exec')) {
$handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler());
} elseif (function_exists('curl_exec')) {
$handler = new CurlHandler();
} elseif (function_exists('curl_multi_exec')) {
$handler = new CurlMultiHandler();
}
if (ini_get('allow_url_fopen')) {
$handler = $handler
? Proxy::wrapStreaming($handler, new StreamHandler())
: new StreamHandler();
} elseif (!