Http2 Client

优质
小牛编辑
134浏览
2023-12-01
<?php
/**
 * Http Client
 */

use Yurun\Util\HttpRequest;
use Swoole\Coroutine\Channel;
use Yurun\Util\YurunHttp\Http\Psr7\Uri;

require dirname(__DIR__) . '/vendor/autoload.php';

go(function(){
    $uri = new Uri('http://www.taobao.com/');

    $client = new \Yurun\Util\YurunHttp\Http2\SwooleClient($uri->getHost(), Uri::getServerPort($uri), 'https' === $uri->getScheme());
    $client->connect();

    // 接收服务端主动推送
    $client->setServerPushQueueLength(16); // 接收服务端推送的队列长度
    go(function() use($client){
        do {
            $response = $client->recv();
            var_dump($response->body());
        } while($response->success);
    });

    // 客户端请求和响应获取
    $httpRequest = new HttpRequest;

    $count = 10;
    $channel = new Channel($count);
    for($i = 0; $i < $count; ++$i)
    {
        go(function() use($i, $client, $channel, $httpRequest, $uri){
            $request = $httpRequest->header('aaa', 'bbb')->buildRequest($uri, [
                'date'  =>  $i,
            ], 'POST', 'json');
            $streamId = $client->send($request);
            var_dump('send:' . $streamId);
            $response = $client->recv($streamId, 3);
            $content = $response->body();
            var_dump('recv:' . $response->getStreamId() . ';statusCode:'. $response->getStatusCode(), ';contentLength:' . strlen($content));
            $channel->push(1);
        });
    }
    $returnCount = 0;
    do {
        if($channel->pop())
        {
            ++$returnCount;
        }
    } while($returnCount < $count);

    $client->close();
});