《 swooleThinkphp 》异步多进程的 CURL 【 三】

异步多进程的 CURL



通常我们进行 http 请求都是通过 curl 或者 file_get_contents,但是并发的性能都不好,Swoole 内置的 swoole_http_client(Http 异步客户端)没有并发限制,可在一个进程内同时并发上万请求。无论从功能、性能、稳定性上 swoole_http_client 都要更胜一筹。swoole_http_client 是由 C 语言实现的,解析 Http 协议的性能是非常高,内存占用也很少。


接下来我们来演示如何在 ThinkPHP5 中使用 swoole_http_client 来进行 http 请求


创建 ThinkPHP5 自定义命令行

1.创建命令行类

创建application/console/HttpClient.php文件


<?php

namespace app\Console;

use think\console\Command;
use think\console\Input;
use think\console\Output;

class HttpClient extends Command
{
    // 命令行配置函数
    protected function configure()
    {
        // setName 设置命令行名称
        // setDescription 设置命令行描述
        $this->setName('http:client')->setDescription('Start Http Client!');
    }
    // 设置命令返回信息
    protected function execute(Input $input, Output $output)
    {
        // 将域名解析为IP地址
        \swoole_async_dns_lookup("freeapi.ipip.net", function ($domainName, $ip) {
            // 实例化 swoole_http_client
            $cli = new \swoole_http_client($ip, 80);
            // 设置 Http 请求头
            $cli->setHeaders([
                'Host'            => $domainName,
                "User-Agent"      => 'Chrome/49.0.2587.3',
                'Accept'          => 'text/html,application/xhtml+xml,application/xml',
                'Accept-Encoding' => 'gzip',
            ]);
            // 发起GET请求
            $cli->get('/202.97.224.68', function ($cli) {
                // 统计返回内容长度
                echo "Length: " . strlen($cli->body) . "\n";
                // 显示返回内容
                echo $cli->body;
                // 关闭请求
                $cli->close();
            });
        });
        $output->writeln("HttpClient: Start.\n");
    }
}



2.修改配置文件

文件所在 application/command.php


<?php

return [
    'app\console\HttpClient',
];


这时直接在命令行输入如下命令就可以显示 http 客户端返回的内容


$ > php think http:client



如果HttpClient: Start.在返回的 json 数据前显示,说明异步客户端正常运作。