RoadRunner是一个用Go语言实现的高性能PSR-7服务器。你没有看错,它是用Go语言实现的。RoadRunner首先使用Go实现一个高性能的服务器,然后通过goridgeIPC将请求转发给多个PHPCLIWorker,Worker将请求重新打包成PSR-7Request交给框架处理。娱乐测试使用siege测试Laravel的欢迎页面,250个并发用户,30秒,对比Nginx+FPM和RoadRunner。Nginx+FPM:$siege--no-parser-c250-t30shttp://127.0.0.1:3000/>/dev/null**SIEGE4.0.4**准备250个并发用户对战。服务器是现在被围困...解除服务器围困...交易:2032命中可用性:97.83%已用时间:29.19秒数据传输:4.51MB响应时间:2.64秒交易率:69.61trans/sec吞吐量:0.15MB/秒并发:183.50成功交易:2032失败交易:45最长交易:27.34最短交易:0.RoadRunner(4worker):$siege--no-parser-c250-t30shttp://127.0.0.1:8080/>/dev/null**SIEGE4.0.4**准备250个并发用户进行战斗。服务器正在被围攻...正在解除服务器围攻...交易:61417次点击可用性:100.00%Elapsedtime:29.26secsDatatransferred:135.95MBResponsetime:0.12secsTransactionrate:2099.01trans/secThroughput:4.65MB/secConcurrency:249.06Successfultransactions:61417Failedtransactions:0Longesttransaction:0.20Shortesttransaction:0.05如何加速Laravel应用RoadRunner安装RoadRunner已经提供了预编译执行文件,下载对应平台的版本即可。配置文件可以由RoadRunner提供:使用RoadRunner。Laravel配置安装依赖:composerrequirespiral/roadrunnerzendframework/zend-diactorossymfony/psr-http-message-bridge在Laravel项目中创建一个psr-worker.php,代码修改自tobias-kuendig:make(Illuminate\Contracts\Http\Kernel::class);while($req=$psr7->acceptRequest()){尝试{$httpFoundationFactory=newHttpFoundationFactory();如果(strpos($req->getHeaderLine("content-type"),"application/json")===0){$body=$req->getBody();$parsedBody=json_decode($body,true);$req=$req->withParsedBody($parsedBody);$symfonyReq=$httpFoundationFactory->createRequest($req);$request=Illuminate\Http\Request::createFromBase($symfonyReq);$response=$kernel->handle($request);$psr7factory=newDiactorosFactory();$psr7response=$psr7factory->createResponse($response);$psr7->respond($psr7response);}catch(\Throwable$e){$psr7->getWorker()->error((string)$e);}}运行rrserve-v修复其他问题,兼容性需要继续关注。更新一:新增JSON解析,解决POST数据丢失问题
