摘要:是一個用語言實現的高性能服務器,你沒看錯,是語言實現的。首先用實現了一個高性能的服務器,然后通過把請求轉發給多個,會把請求重新封裝成交給框架進行處理。娛樂測試使用測試的頁面,個并發用戶,持續秒,對比和。更新加了解析,解決數據丟失
RoadRunner是一個用Go語言實現的高性能PSR-7服務器,你沒看錯,是Go語言實現的。
RoadRunner首先用Go實現了一個高性能的服務器,然后通過goridge IPC把請求轉發給多個PHP CLI Worker,Worker會把請求重新封裝成PSR-7 Request交給框架進行處理。
娛樂測試使用siege測試Laravel的Welcome頁面,250個并發用戶,持續30秒,對比Nginx + FPM和RoadRunner。
Nginx + FPM:
$ siege --no-parser -c 250 -t 30s http://127.0.0.1:3000/ > /dev/null ** SIEGE 4.0.4 ** Preparing 250 concurrent users for battle. The server is now under siege... Lifting the server siege... Transactions: 2032 hits Availability: 97.83 % Elapsed time: 29.19 secs Data transferred: 4.51 MB Response time: 2.64 secs Transaction rate: 69.61 trans/sec Throughput: 0.15 MB/sec Concurrency: 183.50 Successful transactions: 2032 Failed transactions: 45 Longest transaction: 27.34 Shortest transaction: 0.
RoadRunner(4 worker):
$ siege --no-parser -c 250 -t 30s http://127.0.0.1:8080/ > /dev/null ** SIEGE 4.0.4 ** Preparing 250 concurrent users for battle. The server is now under siege... Lifting the server siege... Transactions: 61417 hits Availability: 100.00 % Elapsed time: 29.26 secs Data transferred: 135.95 MB Response time: 0.12 secs Transaction rate: 2099.01 trans/sec Throughput: 4.65 MB/sec Concurrency: 249.06 Successful transactions: 61417 Failed transactions: 0 Longest transaction: 0.20 Shortest transaction: 0.05如何加速Laravel應用 RoadRunner安裝
RoadRunner已經提供了預編譯的執行文件,下載對應平臺的版本即可,配置文件可用RoadRunner提供的:Using RoadRunner.
Laravel配置安裝依賴:
composer require spiral/roadrunner zendframework/zend-diactoros symfony/psr-http-message-bridge
在Laravel項目創建一個psr-worker.php,代碼修改來自tobias-kuendig:
make(IlluminateContractsHttpKernel::class); while ($req = $psr7->acceptRequest()) { try { $httpFoundationFactory = new HttpFoundationFactory(); if (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 = IlluminateHttpRequest::createFromBase($symfonyReq); $response = $kernel->handle($request); $psr7factory = new DiactorosFactory(); $psr7response = $psr7factory->createResponse($response); $psr7->respond($psr7response); } catch (Throwable $e) { $psr7->getWorker()->error((string)$e); } }
運行rr serve -v搞定。
其他問題Issue里提到了POST數據會丟失,簡單地測試了一下,沒有重現,兼容性方面還需持續關注。
更新1:加了JSON解析,解決POST數據丟失
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28886.html
摘要:是為開發的生產級異步編程框架。因為單個請求創建的環境在請求執行結束后會立即銷毀??梢蕴峁姶笮阅芏鴦t可以提供優雅代碼結構使用。在使用這個包之前,請確保你的機器安裝了正確的。建立并運行起來現在,你可以執行以下的命令來啟動服務。 showImg(https://segmentfault.com/img/bVbaF89?w=1240&h=634); Swoole?是為 PHP 開發的生產級異...
摘要:負責解釋執行文件生成響應,最終返回給,展現至前端。相比于傳統架構,進程模型最大的特點在于其多線程模式處理網絡請求,使得其能輕松應對大量連接。這要求開發人員對于多進程的運行模式有更清晰的認識更容易內存泄露。 一、SwooleSwoole號稱重新定義了PHP,它是一個PHP擴展,使得PHP可以使用異步的方式執行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...
摘要:因為為單個請求創建的環境將在請求過程完成后立即銷毀??梢猿蔀閺姶蟮男阅茉鰪娖?,提供了優雅的結構和代碼使用方式。你可以使用此命令快速安裝它,并訪問官方網站獲取更多信息。注意目前僅支持和。服務器不能使用。基準測試使用進行干凈的測試。 Swoole 是針對PHP的生產級異步編程框架。它是一種用純C語言編寫的PHP擴展,它使PHP開發人員能夠在PHP中編寫高性能,可擴展的并發TCP,UDP,U...
摘要:如需要支持熱啟動,請自行谷歌,大概原理就是用監控文件變更,如果更新了重啟如果正式環境中還可以自己寫個部署腳本,后重啟服務等,方法很多不一一列舉。 1 Laravel的速度瓶頸在哪? 1.1 已有的一些優化方法 1.1.1 laravel官方提供了一些優化laravel的優化方法 php artisan optimize php artisan config:cache php arti...
閱讀 767·2023-04-25 15:13
閱讀 1388·2021-11-22 12:03
閱讀 816·2021-11-19 09:40
閱讀 1897·2021-11-17 09:38
閱讀 1702·2021-11-08 13:18
閱讀 649·2021-09-02 15:15
閱讀 1760·2019-08-30 15:54
閱讀 2623·2019-08-30 11:12