YurunHttp v4.2.0 智能識別 Swoole 場景的高性能 Http Client

YurunHttp 是開源的 PHP HTTP 類庫,支持鏈式操做,簡單易用。php

支持全部常見的 GET、POST、PUT、DELETE、UPDATE 等請求方式,支持 Http二、WebSocket、瀏覽器級別 Cookies 管理、上傳下載、設置和讀取 header、Cookie、請求參數、失敗重試、限速、代理、證書等。html

支持 Curl 和 Swoole 環境智能識別兼容。git

API 文檔:https://apidoc.gitee.com/yuru...github

Github:https://github.com/Yurunsoft/...web

Gitee:https://gitee.com/yurunsoft/Y...json

git 倉庫中 examples 目錄裏是示例代碼!

更新日誌(v4.2.0):

  • 重構 Swoole 處理器,併發請求性能大幅提高
  • 下降 PHP 版本依賴至 5.5

更新日誌(v4.1.0):

  • 實現智能識別場景,自動選擇適合 Curl/Swoole 環境的處理器

性能測試

循環 1W 請求測試排行

排行 名稱 時間(單位:秒) 環境
1 yurunhttp-swoole 1.69s Swoole
2 yurunhttp-curl 2.08s Curl
3 guzzle 2.71s Curl
4 saber 2.77s Swoole

併發 1W 請求測試排行

排行 名稱 時間(單位:秒) 環境
1 yurunhttp-swoole 1.21s Swoole
2 saber 1.47s Swoole
3 yurunhttp-curl 3.25s Curl
4 guzzle 7.39s Curl

測試倉庫:https://github.com/Yurunsoft/...api

視頻地址:https://www.bilibili.com/vide...瀏覽器

重大版本更新日誌

每一個小版本的更新日誌請移步到 Release 查看websocket

v4.2.0 重構 Swoole 處理器,併發請求性能大幅提高 (PHP 版本依賴降爲 >= 5.5)swoole

v4.1.0 實現智能識別場景,自動選擇適合 Curl/Swoole 環境的處理器

v4.0.0 新增支持 Swoole 併發批量請求 (PHP >= 7.1)

v3.5.0 新增支持 Curl 併發批量請求 (PHP >= 5.5)

v3.4.0 新增支持 Http2 全雙工用法

v3.3.0 新增支持 Http2 兼容用法

v3.2.0 新增支持 Swoole WebSocket 客戶端

v3.1.0 引入瀏覽器級別 Cookies 管理

v3.0.0 新增支持 Swoole 協程

v2.0.0 黑歷史,不告訴你

v1.3.1 支持 Composer

v1.0-1.3 初期版本迭代

Composer

本項目能夠使用composer安裝,遵循psr-4自動加載規則,在你的 composer.json 中加入下面的內容

{
    "require": {
        "yurunsoft/yurun-http": "^4.2.0"
    }
}

而後執行 composer update 安裝。

以後你即可以使用 include "vendor/autoload.php"; 來自動加載類。(ps:不要忘了namespace)

用法

簡單調用

<?php
use Yurun\Util\HttpRequest;

$http = new HttpRequest;
$response = $http->ua('YurunHttp')
                 ->get('http://www.baidu.com');

echo 'html:', PHP_EOL, $response->body();

併發批量請求

use \Yurun\Util\YurunHttp\Co\Batch;

$result = Batch::run([
    (new HttpRequest)->url('https://www.imiphp.com'),
    (new HttpRequest)->url('https://www.yurunsoft.com'),
]);

var_dump($result[0]->getHeaders(), strlen($result[0]->body()), $result[0]->getStatusCode());

var_dump($result[1]->getHeaders(), strlen($result[1]->body()), $result[1]->getStatusCode());

WebSocket Client

YurunHttp::setDefaultHandler(\Yurun\Util\YurunHttp\Handler\Swoole::class);
go(function(){
    $url = 'ws://127.0.0.1:1234/';
    $http = new HttpRequest;
    $client = $http->websocket($url);
    if(!$client->isConnected())
    {
        throw new \RuntimeException('Connect failed');
    }
    $client->send('data');
    $recv = $client->recv();
    var_dump('recv:', $recv);
    $client->close();
});

Http2 全雙工用法

$uri = new Uri('https://wiki.swoole.com/');

// 客戶端初始化和鏈接
$client = new \Yurun\Util\YurunHttp\Http2\SwooleClient($uri->getHost(), Uri::getServerPort($uri), 'https' === $uri->getScheme());
$client->connect();

// 請求構建
$httpRequest = new HttpRequest;
$request = $httpRequest->header('aaa', 'bbb')->buildRequest($uri, [
    'date'  =>  $i,
], 'POST', 'json');

for($i = 0; $i < 10; ++$i)
{
    go(function() use($client, $request){
        // 發送(支持在多個協程執行)
        $streamId = $client->send($request);
        var_dump('send:' . $streamId);

        // 接收(支持在多個協程執行)
        $response = $client->recv($streamId, 3);
        $content = $response->body();
        var_dump($response);
    });
}

具體詳見examples目錄中的示例代碼

相關文章
相關標籤/搜索