摘要:使用改造應用標簽空格分隔概述介紹是為開發的生產級異步編程框架。然后你可以看到以下信息現在可以通過訪問來進入應用。
使用swoole改造laravel應用
標簽(空格分隔): php
Swoole 是為 PHP 開發的生產級異步編程框架。 他是一個純 C 開發的擴展, 他允許 PHP 開發者在 PHP 中寫 高性能,可擴展的并發 TCP, UDP, Unix socket, HTTP, WebSocket 服務, 而不需要擁有太多的非阻塞 I/O 編程和低級別的 Linux 內核知識。 你可以把 Swoole 想象成 Go, 但對于 PHP 來說將有更高性能。
1.2 為什么要在 Swoole 上運行 Laravel?在PHP的生命周期中, 當你每次運行PHP腳本的時候, PHP都需要初始化模塊并為你的運行環境啟動zend引擎. 并將PHP腳本編譯為OpCodes以便Zend引擎執行.
但是, 這樣的生命周期需要在每次請求的時候都執行一遍, 因為單個請求創建的環境在請求結束后立即銷毀.
換句話說, 在傳統的PHP生命周期中, 為了腳本執行而浪費了大量的時間去創建和銷毀資源. 想象一下像laravel這樣的框架, 在每次請求中需要加載多少文件? 同時也浪費了大量的I/O操作.
swoole是內置在應用級別的server, 并且所有腳本文件在加載一次之后便可以保存在內存中. 這就是為什么我們需要嘗試在swoole上運行laravel.
swoole可以提供強大性能而Laravel則可以提供優雅代碼結構. 完美!
2. 準備工作app | php | laravel | swoole |
---|---|---|---|
your.domain.com | 7.1.16 | 5.4.36 | 4.1.2 |
基準測試工具:wrk
// wrk命令參數 -c, --connections: total number of HTTP connections to keep open with each thread handling N = connections/threads -d, --duration: duration of the test, e.g. 2s, 2m, 2h -t, --threads: total number of threads to use -s, --script: LuaJIT script, see SCRIPTING -H, --header: HTTP header to add to request, e.g. "User-Agent: wrk" --latency: print detailed latency statistics --timeout: record a timeout if a response is not received within this amount of time.2.2 php-swoole安裝
pecl install swoole
RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories && sed -i "s/nl.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS && docker-php-source extract && cd /usr/src && wget http://pecl.php.net/get/swoole-4.1.2.tgz && tar -xzvf swoole-4.1.2.tgz && mv /usr/src/swoole-4.1.2 /usr/src/php/ext/swoole && docker-php-ext-configure swoole --enable-openssl && docker-php-ext-install swoole && runDeps="$( scanelf --needed --nobanner --format "%n#p" --recursive /usr/local | tr "," " " | sort -u | awk "system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }" )" && apk add --no-cache --virtual .php-rundeps $runDeps && docker-php-source delete && apk del .build-deps && rm -rf /usr/src/swoole-4.1.2.tgz2.3 laravel-swoole 擴展安裝
以下是 swooletw/laravel-swoole 的主要特點:
在 Swoole 運行 Laravel/Lumen 應用
出色的性能提升至 30x
沙盒模式隔離應用程序容器
支持在 Laravel 應用中運行 WebSocket 服務器
支持 Socket.io 協議
支持 Swoole 表跨進程共享
使用 Composer 安裝:
$ composer require swooletw/laravel-swoole2.4 laravel/lumen配置
這個包支持包自動發現機制。如果你運行 Laravel 5.5 以上版本,你可以跳過這一步。
laravel配置: 在 config/app.php 服務提供者數組添加該服務提供者
[ "providers" => [ SwooleTWHttpLaravelServiceProvider::class, ], ]
lumen配置: 請將下面的代碼添加到 bootstrap/app.php
$app->register(SwooleTWHttpLumenServiceProvider::class);3. 基準測試數據 3.1 建立并運行起來
現在,你可以執行以下的命令來啟動 Swoole HTTP 服務。
php artisan swoole:http start
然后你可以看到以下信息:
Starting swoole http server...
Swoole http server started: http://127.0.0.1:1215
現在可以通過訪問 http://127.0.0.1:1215 來進入 Laravel 應用。
如果需要修改端口號或服務地址, 可配置相應的環境變量
// vendor/swooletw/laravel-swoole/config/swoole_http.php SWOOLE_HTTP_HOST: "127.0.0.1" SWOOLE_HTTP_PORT: "1215"
詳細的文檔參考: https://wiki.swoole.com/wiki/page/14.html
3.2 基于 FPM + Nginx 的測試結果wrk -t4 -c100 http://your.domain.com/version Running 10s test @ http://your.domain.com/version 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 341.64ms 108.70ms 801.47ms 69.08% Req/Sec 71.72 27.35 171.00 65.57% 2864 requests in 10.03s, 2.84MB read Requests/sec: 285.63 Transfer/sec: 289.79KB
wrk -t12 -c400 -d30s http://your.domain.com/version Running 30s test @ http://your.domain.com/version 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 801.35ms 349.89ms 2.00s 68.56% Req/Sec 40.61 19.83 126.00 65.80% 14390 requests in 30.10s, 14.24MB read Socket errors: connect 0, read 0, write 0, timeout 132 Requests/sec: 478.09 Transfer/sec: 484.34KB3.3 Swoole HTTP 服務的測試結果
wrk -t4 -c100 http://your.domain.com/version Running 10s test @ http://your.domain.com/version 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 198.64ms 324.54ms 1.96s 88.59% Req/Sec 225.62 91.30 430.00 62.72% 9021 requests in 10.09s, 7.90MB read Socket errors: connect 0, read 0, write 0, timeout 25 Requests/sec: 893.71 Transfer/sec: 801.26KB
wrk -t12 -c400 -d30s http://your.domain.com/version Running 30s test @ http://your.domain.com/version 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 319.84ms 398.59ms 2.00s 85.59% Req/Sec 66.94 35.58 240.00 66.09% 23862 requests in 30.09s, 20.89MB read Socket errors: connect 0, read 0, write 0, timeout 619 Requests/sec: 793.04 Transfer/sec: 711.05KB4. 問題&注意事項
php7只能用swoole 4.0+ 版本
4.1 靜態文件使用swoole性能是否受到影響?使用Nginx來代理運行于Swoole上的Laravel
server { listen 80; server_name your.domain.com; root /path/to/laravel/public; index index.php; location = /index.php { # Ensure that there is no such file named "not_exists" # in your "public" directory. try_files /not_exists @swoole; } location / { try_files $uri $uri/ @swoole; } location @swoole { set $suffix ""; if ($uri = /index.php) { set $suffix "/"; } proxy_set_header Host $host; proxy_set_header SERVER_PORT $server_port; proxy_set_header REMOTE_ADDR $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # IF https # proxy_set_header HTTPS "on"; proxy_pass http://127.0.0.1:1215$suffix; } }5. 參考
使用 Swoole 來加速你的 Laravel 應用
swoole 入門指引
laravel-swoole
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30856.html
摘要:是非?,F代化的一套框架基于的構建方式其很多核心依賴并非完全自己所維護而依賴于等較成熟的以此實現現代化框架的集眾優于一身站在巨人肩上的特點經過前面的了解我們已經知道給帶來的無可比擬的優勢但因為一些局限我們無法將其直接用于成熟的框架而需要進行 Laravel Laravel 是非常現代化的一套 PHP 框架, 基于 composer 的構建方式, 其很多核心依賴并非完全 Laravel 自...
摘要:首先,確認你是用的是然后,你需要依賴這個包,作用是實現的偽接口將修改成在你的命令中啟動,測試下帶有數據庫查詢的接口。如至此,你的項目的協程化改造成功。 Installation 首先,確認你是用的是laravel 5.6 然后,你需要依賴 kuaiapp/db 這個包,作用是實現 SwooleCoroutineMySQL 的偽 PDO 接口 composer require kuai...
摘要:負責解釋執行文件生成響應,最終返回給,展現至前端。相比于傳統架構,進程模型最大的特點在于其多線程模式處理網絡請求,使得其能輕松應對大量連接。這要求開發人員對于多進程的運行模式有更清晰的認識更容易內存泄露。 一、SwooleSwoole號稱重新定義了PHP,它是一個PHP擴展,使得PHP可以使用異步的方式執行,就像node一樣,而且還能使用socket,為PHP提供了一系列異步IO、事件...
摘要:是為開發的生產級異步編程框架。因為單個請求創建的環境在請求執行結束后會立即銷毀。可以提供強大性能而則可以提供優雅代碼結構使用。在使用這個包之前,請確保你的機器安裝了正確的。建立并運行起來現在,你可以執行以下的命令來啟動服務。 showImg(https://segmentfault.com/img/bVbaF89?w=1240&h=634); Swoole?是為 PHP 開發的生產級異...
摘要:因為為單個請求創建的環境將在請求過程完成后立即銷毀??梢猿蔀閺姶蟮男阅茉鰪娖?,提供了優雅的結構和代碼使用方式。你可以使用此命令快速安裝它,并訪問官方網站獲取更多信息。注意目前僅支持和。服務器不能使用。基準測試使用進行干凈的測試。 Swoole 是針對PHP的生產級異步編程框架。它是一種用純C語言編寫的PHP擴展,它使PHP開發人員能夠在PHP中編寫高性能,可擴展的并發TCP,UDP,U...
閱讀 2731·2021-11-24 09:39
閱讀 1647·2021-09-28 09:35
閱讀 1119·2021-09-06 15:02
閱讀 1306·2021-07-25 21:37
閱讀 2726·2019-08-30 15:53
閱讀 3643·2019-08-30 14:07
閱讀 714·2019-08-30 11:07
閱讀 3512·2019-08-29 18:36