workerman v5.0异步http客户端http-client测试用例

efnic

测试代码,200个并发请求

<?php

use Workerman\Worker;

require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker();
$worker->onWorkerStart = function () {
    $http = new Workerman\Http\Client();

    $start_time = microtime(true);
    echo '开始时间' . $start_time . PHP_EOL;
    $num = 200;
    $result = [];
    while ($num--) {
        $http->get('https://example.com/', function ($response) use ($start_time, $num, &$result) {
            //var_dump($response->getStatusCode());
            //echo $response->getBody();
            $result[$num] = sprintf('第%d个 | 耗时%s秒 | 状态码%d', $num, microtime(true) - $start_time, $response->getStatusCode());
            if (200 === count($result)) {
                print_r($result);
                echo '请求完成,总耗时' . (microtime(true) - $start_time) . PHP_EOL;
            }
        }, function ($exception) {
            echo $exception;
        });
    }
    $end_time = microtime(true);
    echo '结束时间' . $end_time . PHP_EOL;
};
Worker::runAll();

测试总结

200个并发请求,总耗时213.22毫秒,平均到每个请求1ms左右

测试结果详细

---------------------------------------------- WORKERMAN ----------------------------------------------- 
Workerman version:5.0.0-beta.7          PHP version:8.3.0                                                
----------------------------------------------- WORKERS ------------------------------------------------ 
worker                                          listen                              processes   status   
none                                            none                                1           [ok]     
开始时间1702618005.9973                                                                                  
结束时间1702618006.0564 
Array                                                   
(                                                       
    [92] => 第92个 | 耗时0.16888999938965秒 | 状态码200 
    [90] => 第90个 | 耗时0.16899704933167秒 | 状态码200 
    [96] => 第96个 | 耗时0.17014193534851秒 | 状态码200 
    [95] => 第95个 | 耗时0.17020297050476秒 | 状态码200 
    [93] => 第93个 | 耗时0.17025685310364秒 | 状态码200 
    [88] => 第88个 | 耗时0.17029881477356秒 | 状态码200 
    [80] => 第80个 | 耗时0.17034387588501秒 | 状态码200 
    [78] => 第78个 | 耗时0.17038583755493秒 | 状态码200
    [83] => 第83个 | 耗时0.17101693153381秒 | 状态码200
    [82] => 第82个 | 耗时0.17106604576111秒 | 状态码200
    [91] => 第91个 | 耗时0.17197799682617秒 | 状态码200
    [89] => 第89个 | 耗时0.17203497886658秒 | 状态码200
    [94] => 第94个 | 耗时0.17486596107483秒 | 状态码200
    [86] => 第86个 | 耗时0.17539691925049秒 | 状态码200
    [81] => 第81个 | 耗时0.1758189201355秒 | 状态码200
    [79] => 第79个 | 耗时0.17652988433838秒 | 状态码200
    [72] => 第72个 | 耗时0.17682003974915秒 | 状态码200
    [73] => 第73个 | 耗时0.17745304107666秒 | 状态码200
    [84] => 第84个 | 耗时0.17778086662292秒 | 状态码200
    [87] => 第87个 | 耗时0.1780378818512秒 | 状态码200
    [85] => 第85个 | 耗时0.17808198928833秒 | 状态码200
    [76] => 第76个 | 耗时0.17965698242188秒 | 状态码200
    [199] => 第199个 | 耗时0.18000984191895秒 | 状态码200
    [192] => 第192个 | 耗时0.18026304244995秒 | 状态码200
    [74] => 第74个 | 耗时0.18072390556335秒 | 状态码200
    [196] => 第196个 | 耗时0.18092489242554秒 | 状态码200
    [77] => 第77个 | 耗时0.18111300468445秒 | 状态码200
    [195] => 第195个 | 耗时0.18150281906128秒 | 状态码200
    [198] => 第198个 | 耗时0.18170404434204秒 | 状态码200
    [197] => 第197个 | 耗时0.1820969581604秒 | 状态码200
    [75] => 第75个 | 耗时0.18214392662048秒 | 状态码200
    [190] => 第190个 | 耗时0.18248987197876秒 | 状态码200
    [191] => 第191个 | 耗时0.18266296386719秒 | 状态码200
    [182] => 第182个 | 耗时0.18316888809204秒 | 状态码200
    [187] => 第187个 | 耗时0.18334603309631秒 | 状态码200
    [184] => 第184个 | 耗时0.18354201316833秒 | 状态码200
    [183] => 第183个 | 耗时0.1837329864502秒 | 状态码200
    [188] => 第188个 | 耗时0.18419885635376秒 | 状态码200
    [193] => 第193个 | 耗时0.18490695953369秒 | 状态码200
    [189] => 第189个 | 耗时0.18512392044067秒 | 状态码200
    [176] => 第176个 | 耗时0.1851749420166秒 | 状态码200
    [71] => 第71个 | 耗时0.18521904945374秒 | 状态码200
    [194] => 第194个 | 耗时0.18545699119568秒 | 状态码200
    [70] => 第70个 | 耗时0.18550491333008秒 | 状态码200
    [181] => 第181个 | 耗时0.18573188781738秒 | 状态码200
    [171] => 第171个 | 耗时0.18619894981384秒 | 状态码200
    [66] => 第66个 | 耗时0.18738484382629秒 | 状态码200
    [169] => 第169个 | 耗时0.18759489059448秒 | 状态码200
    [164] => 第164个 | 耗时0.18764185905457秒 | 状态码200
    [185] => 第185个 | 耗时0.18785691261292秒 | 状态码200
    [162] => 第162个 | 耗时0.18790102005005秒 | 状态码200
    [141] => 第141个 | 耗时0.18793988227844秒 | 状态码200
    [186] => 第186个 | 耗时0.1881468296051秒 | 状态码200
    [180] => 第180个 | 耗时0.18818783760071秒 | 状态码200
    [175] => 第175个 | 耗时0.18822693824768秒 | 状态码200
    [167] => 第167个 | 耗时0.18826699256897秒 | 状态码200
    [178] => 第178个 | 耗时0.18848085403442秒 | 状态码200
    [172] => 第172个 | 耗时0.18852281570435秒 | 状态码200
    [157] => 第157个 | 耗时0.18856382369995秒 | 状态码200
    [150] => 第150个 | 耗时0.18860483169556秒 | 状态码200
    [139] => 第139个 | 耗时0.18882393836975秒 | 状态码200
    [174] => 第174个 | 耗时0.18903398513794秒 | 状态码200
    [170] => 第170个 | 耗时0.18907594680786秒 | 状态码200 
    [165] => 第165个 | 耗时0.18911695480347秒 | 状态码200
    [154] => 第154个 | 耗时0.18915390968323秒 | 状态码200
    [153] => 第153个 | 耗时0.18934488296509秒 | 状态码200
    [177] => 第177个 | 耗时0.18971800804138秒 | 状态码200
    [173] => 第173个 | 耗时0.18976283073425秒 | 状态码200
    [160] => 第160个 | 耗时0.18980288505554秒 | 状态码200
    [168] => 第168个 | 耗时0.18998885154724秒 | 状态码200
    [166] => 第166个 | 耗时0.19003081321716秒 | 状态码200
    [161] => 第161个 | 耗时0.19007086753845秒 | 状态码200
    [145] => 第145个 | 耗时0.1900999546051秒 | 状态码200
    [179] => 第179个 | 耗时0.19045090675354秒 | 状态码200
    [163] => 第163个 | 耗时0.19047784805298秒 | 状态码200
    [147] => 第147个 | 耗时0.19062399864197秒 | 状态码200
    [143] => 第143个 | 耗时0.19064903259277秒 | 状态码200
    [158] => 第158个 | 耗时0.19091296195984秒 | 状态码200
    [155] => 第155个 | 耗时0.19108104705811秒 | 状态码200
    [146] => 第146个 | 耗时0.19149994850159秒 | 状态码200
    [156] => 第156个 | 耗时0.19176387786865秒 | 状态码200
    [152] => 第152个 | 耗时0.19178891181946秒 | 状态码200
    [134] => 第134个 | 耗时0.19181299209595秒 | 状态码200
    [128] => 第128个 | 耗时0.19195604324341秒 | 状态码200
    [148] => 第148个 | 耗时0.19221496582031秒 | 状态码200
    [65] => 第65个 | 耗时0.19224095344543秒 | 状态码200
    [140] => 第140个 | 耗时0.19250082969666秒 | 状态码200
    [159] => 第159个 | 耗时0.19264388084412秒 | 状态码200
    [127] => 第127个 | 耗时0.19266796112061秒 | 状态码200
    [121] => 第121个 | 耗时0.19303894042969秒 | 状态码200
    [131] => 第131个 | 耗时0.19329786300659秒 | 状态码200
    [64] => 第64个 | 耗时0.1933228969574秒 | 状态码200
    [118] => 第118个 | 耗时0.1937370300293秒 | 状态码200
    [144] => 第144个 | 耗时0.19399690628052秒 | 状态码200
    [151] => 第151个 | 耗时0.19413805007935秒 | 状态码200
    [105] => 第105个 | 耗时0.19441390037537秒 | 状态码200
    [103] => 第103个 | 耗时0.19467091560364秒 | 状态码200
    [112] => 第112个 | 耗时0.19481492042542秒 | 状态码200
    [110] => 第110个 | 耗时0.19507598876953秒 | 状态码200
    [129] => 第129个 | 耗时0.19521903991699秒 | 状态码200
    [115] => 第115个 | 耗时0.19524192810059秒 | 状态码200
    [107] => 第107个 | 耗时0.19526386260986秒 | 状态码200
    [102] => 第102个 | 耗时0.19541192054749秒 | 状态码200
    [149] => 第149个 | 耗时0.19555592536926秒 | 状态码200
    [138] => 第138个 | 耗时0.19569802284241秒 | 状态码200
    [137] => 第137个 | 耗时0.19571900367737秒 | 状态码200
    [114] => 第114个 | 耗时0.19585990905762秒 | 状态码200
    [111] => 第111个 | 耗时0.19588184356689秒 | 状态码200
    [130] => 第130个 | 耗时0.19613695144653秒 | 状态码200
    [123] => 第123个 | 耗时0.19628691673279秒 | 状态码200
    [142] => 第142个 | 耗时0.19655203819275秒 | 状态码200
    [108] => 第108个 | 耗时0.19657397270203秒 | 状态码200
    [106] => 第106个 | 耗时0.19659495353699秒 | 状态码200
    [136] => 第136个 | 耗时0.19673490524292秒 | 状态码200
    [125] => 第125个 | 耗时0.1967568397522秒 | 状态码200
    [98] => 第98个 | 耗时0.19677901268005秒 | 状态码200
    [49] => 第49个 | 耗时0.19692492485046秒 | 状态码200
    [117] => 第117个 | 耗时0.19694685935974秒 | 状态码200
    [116] => 第116个 | 耗时0.19783091545105秒 | 状态码200
    [113] => 第113个 | 耗时0.19886898994446秒 | 状态码200
    [109] => 第109个 | 耗时0.19922590255737秒 | 状态码200
    [39] => 第39个 | 耗时0.19949889183044秒 | 状态码200
    [42] => 第42个 | 耗时0.19976782798767秒 | 状态码200
    [48] => 第48个 | 耗时0.19979596138秒 | 状态码200
    [37] => 第37个 | 耗时0.19982194900513秒 | 状态码200
    [38] => 第38个 | 耗时0.19984698295593秒 | 状态码200
    [124] => 第124个 | 耗时0.19987082481384秒 | 状态码200
    [46] => 第46个 | 耗时0.20001792907715秒 | 状态码200
    [44] => 第44个 | 耗时0.20004200935364秒 | 状态码200
    [122] => 第122个 | 耗时0.20006585121155秒 | 状态码200
    [119] => 第119个 | 耗时0.2000880241394秒 | 状态码200
    [43] => 第43个 | 耗时0.20023393630981秒 | 状态码200
    [40] => 第40个 | 耗时0.20025682449341秒 | 状态码200
    [99] => 第99个 | 耗时0.20027899742126秒 | 状态码200
    [57] => 第57个 | 耗时0.20030283927917秒 | 状态码200
    [35] => 第35个 | 耗时0.20045399665833秒 | 状态码200
    [100] => 第100个 | 耗时0.20047688484192秒 | 状态码200
    [97] => 第97个 | 耗时0.2004988193512秒 | 状态码200
    [67] => 第67个 | 耗时0.20052099227905秒 | 状态码200
    [61] => 第61个 | 耗时0.20054388046265秒 | 状态码200
    [58] => 第58个 | 耗时0.20056581497192秒 | 状态码200
    [55] => 第55个 | 耗时0.2005889415741秒 | 状态码200
    [36] => 第36个 | 耗时0.20073699951172秒 | 状态码200
    [135] => 第135个 | 耗时0.20075988769531秒 | 状态码200
    [104] => 第104个 | 耗时0.20078086853027秒 | 状态码200
    [101] => 第101个 | 耗时0.20080184936523秒 | 状态码200
    [68] => 第68个 | 耗时0.20082402229309秒 | 状态码200
    [132] => 第132个 | 耗时0.20096898078918秒 | 状态码200
    [69] => 第69个 | 耗时0.20098996162415秒 | 状态码200
    [60] => 第60个 | 耗时0.20101284980774秒 | 状态码200
    [63] => 第63个 | 耗时0.2010350227356秒 | 状态码200
    [54] => 第54个 | 耗时0.20105791091919秒 | 状态码200
    [34] => 第34个 | 耗时0.2012050151825秒 | 状态码200
    [133] => 第133个 | 耗时0.20122885704041秒 | 状态码200
    [126] => 第126个 | 耗时0.20124983787537秒 | 状态码200
    [120] => 第120个 | 耗时0.20127081871033秒 | 状态码200
    [59] => 第59个 | 耗时0.20129299163818秒 | 状态码200
    [62] => 第62个 | 耗时0.20131492614746秒 | 状态码200
    [56] => 第56个 | 耗时0.20134091377258秒 | 状态码200
    [27] => 第27个 | 耗时0.20148801803589秒 | 状态码200
    [50] => 第50个 | 耗时0.20151400566101秒 | 状态码200
    [53] => 第53个 | 耗时0.20165801048279秒 | 状态码200
    [31] => 第31个 | 耗时0.20179891586304秒 | 状态码200
    [52] => 第52个 | 耗时0.201819896698秒 | 状态码200
    [30] => 第30个 | 耗时0.20208096504211秒 | 状态码200
    [25] => 第25个 | 耗时0.2021050453186秒 | 状态码200
    [45] => 第45个 | 耗时0.20212888717651秒 | 状态码200
    [41] => 第41个 | 耗时0.20215201377869秒 | 状态码200
    [47] => 第47个 | 耗时0.20219683647156秒 | 状态码200
    [26] => 第26个 | 耗时0.20235085487366秒 | 状态码200
    [51] => 第51个 | 耗时0.20237398147583秒 | 状态码200
    [32] => 第32个 | 耗时0.20263600349426秒 | 状态码200
    [20] => 第20个 | 耗时0.20293283462524秒 | 状态码200
    [33] => 第33个 | 耗时0.20319700241089秒 | 状态码200
    [11] => 第11个 | 耗时0.2032208442688秒 | 状态码200
    [17] => 第17个 | 耗时0.20336890220642秒 | 状态码200
    [13] => 第13个 | 耗时0.20339202880859秒 | 状态码200
    [29] => 第29个 | 耗时0.20365190505981秒 | 状态码200
    [16] => 第16个 | 耗时0.20367789268494秒 | 状态码200
    [23] => 第23个 | 耗时0.20381999015808秒 | 状态码200
    [21] => 第21个 | 耗时0.20384192466736秒 | 状态码200
    [28] => 第28个 | 耗时0.20386505126953秒 | 状态码200
    [9] => 第9个 | 耗时0.20400786399841秒 | 状态码200
    [12] => 第12个 | 耗时0.2040319442749秒 | 状态码200
    [22] => 第22个 | 耗时0.20429396629333秒 | 状态码200
    [24] => 第24个 | 耗时0.20431804656982秒 | 状态码200
    [19] => 第19个 | 耗时0.20446801185608秒 | 状态码200
    [18] => 第18个 | 耗时0.20449304580688秒 | 状态码200
    [14] => 第14个 | 耗时0.20486402511597秒 | 状态码200
    [15] => 第15个 | 耗时0.2051260471344秒 | 状态码200
    [7] => 第7个 | 耗时0.20514893531799秒 | 状态码200
    [8] => 第8个 | 耗时0.20528984069824秒 | 状态码200
    [6] => 第6个 | 耗时0.2053120136261秒 | 状态码200
    [1] => 第1个 | 耗时0.20559191703796秒 | 状态码200
    [3] => 第3个 | 耗时0.20561790466309秒 | 状态码200
    [10] => 第10个 | 耗时0.20611596107483秒 | 状态码200
    [5] => 第5个 | 耗时0.20638394355774秒 | 状态码200
    [4] => 第4个 | 耗时0.20664882659912秒 | 状态码200
    [0] => 第0个 | 耗时0.20667481422424秒 | 状态码200
    [2] => 第2个 | 耗时0.20694398880005秒 | 状态码200
)
请求完成,总耗时0.21322989463806
977 5 4
5个回答

深蓝

并发协程真酷,让我想起以前用易语言批量多线程注册账号的时候。😁

  • Tinywan 2023-12-16

    先留着,还没开始整

  • happy321 2023-12-26

    大佬整个mysql的协程吧 这个curl用的不是很多

胡桃

异步回调语法,不是真正的协程

  • 暂无评论
luhuan

你这是异步的,不是协程

  • 暂无评论
tomlibao

workerman/http-client是一个异步http客户端组件。所有请求响应异步非阻塞,内置连接池,消息请求和响应符合PSR7规范。

kspade

这不是 guzzle 的 Promise 一样吗

  • 暂无评论
🔝