laravel-swoole和websocket入門(一)

1,前言

  • swoole: PHP的協(xié)程高性能網(wǎng)絡(luò)通信引擎,使用完全同步的代碼實現(xiàn)異步程序。PHP代碼無需額外增加任何關(guān)鍵詞,底層自動進行協(xié)程調(diào)度,實現(xiàn)異步IO。
  • websocket:可以建立服務(wù)器與客戶端的雙向連接,用于實時通訊,可替代AJax輪詢,節(jié)約服務(wù)器資源。
  • Laravel-swoole:laravel的一個擴展,Laravel的一個請求需要加載很多文件,消耗IO。在swoole上運行l(wèi)aravel,第一次運行時把所有PHP腳本文件都加載的內(nèi)存中,然后每次請求都不用再讀取腳本文件,速度能提升多少,大家可以想象一下。

2,安裝

以下是主要特點swooletw/laravel-swoole:

  • 在swoole上運行l(wèi)aravel
  • 出色的性能提升高達30倍
  • 支持在Laravel中運行WebSocket服務(wù)器

通過composer安裝

$ composer require swooletw/laravel-swoole

安裝的時候請注意版本號,如果php版本和服務(wù)器swoole的版本比較低,可以安裝低版本的laravel-swoole

使用此擴展要確保服務(wù)器已安裝PHP的Swoole擴展。Swoole擴展快速安裝命令:

pecl install swoole

安裝完畢后,要的php.ini里添加extension=swoole.so,啟用擴展

注冊服務(wù)提供者,添加到config/app.php的providers數(shù)組中,laravel5.5以上版本跳過此步驟

[
    'providers' => [
        SwooleTW\Http\LaravelServiceProvider::class,
    ],
]

3,配置

如果使用默認配置可以跳過此步驟

生成配置文件,運行以下命令在/config命令看生成配置文件swoole_http.php并swoole_websocket.php

$ php artisan vendor:publish --tag=laravel-swoole

swoole_http.php(部分配置)

server.host 服務(wù)器監(jiān)聽主機地址(127.0.0.1)
server.port 服務(wù)器偵聽端口(要注意服務(wù)器是否開放端口)
public_path 項目的public文件夾路徑(base_path('public'))
handle_static_files 確定是否使用Swoole響應(yīng)靜態(tài)文件的請求。(您應(yīng)該使用Nginx來處理靜態(tài)文件。false)
websocket.enabled 是否啟動socket,設(shè)為true才可使用websocket

swoole_websocket.php(部分配置)

handler 用于onOpen和onClose回調(diào)函數(shù)的Websocket處理程序
parser 默認的websocket框架解析器
route_file Websocket路由文件路徑

4,在swoole上運行項目

通過命令行啟動swoole:http 服務(wù)

php artisan swoole:http start

看到以下信息表示運行成功

Starting swoole http server...
Swoole http server started: <http://127.0.0.1:1215>
現(xiàn)在來測試下速度怎么樣

測試前的準備

  • 安裝wrk測試工具
  • 把域名一正常解析到80端口
  • 把域名二也解析到80端口,在nginx中配置反向代理
location ~ {
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:1215;
    }

開始測試了,先來測試域名一

wrk -t4 -c100 http://www.***.com
Running 10s test @ http://www.***.com
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.37s   486.14ms   1.91s    53.85%
    Req/Sec     8.56      9.03    38.00     88.24%
  61 requests in 10.11s, 488.94KB read
  Socket errors: connect 0, read 0, write 0, timeout 48
Requests/sec:      6.03
Transfer/sec:     48.36KB

平均每秒請求量6.03

再來試試域名二的,也就是運行在swoole上的

wrk -t4 -c100 http://www.***.com
Running 10s test @ http://www.***.com
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   334.99ms   53.56ms 505.09ms   82.25%
    Req/Sec    87.50     69.07   240.00     66.67%
  2929 requests in 10.02s, 21.54MB read
Requests/sec:    292.37
Transfer/sec:      2.15MB

平均每秒請求量292,速度提升將近50倍。這個差距也出乎我的意料,可能測試的頁面只是一個首頁,沒有復(fù)雜的運算和mysql限制才提升這么明顯。當(dāng)然實際應(yīng)用中影響速度的肯定不局限于IO,還有mysql的效率,實際效果會低于測試數(shù)據(jù),但10倍以上的提升應(yīng)該是沒有問題的。

下一篇寫websocket在laravel-swoole下的運行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 必備品文檔:DocumentationAPI: API Reference視頻:Laracasts速查表:Lara...
    daos閱讀 1,198評論 0 4
  • Swoole 是為 PHP 開發(fā)的生產(chǎn)級異步編程框架。 他是一個純 C 開發(fā)的擴展, 他允許 PHP 開發(fā)者在 P...
    summerbluet閱讀 2,287評論 1 16
  • 參考資料 官方網(wǎng)站 https://www.swoole.com/page/download PHP沒有像Pyth...
    JunChow520閱讀 3,086評論 0 6
  • 作者:卷毛佟(原創(chuàng)文章,歡迎點贊關(guān)注,轉(zhuǎn)載請聯(lián)系作者)跟我一起成為“生活玩家”,感謝關(guān)注。 從今年開始,我每天晚上...
    卷毛佟閱讀 633評論 4 10
  • 船停在碼頭是最安全的,但那不是造船的目的;人待在家裡也是最舒服的,但那不是人生的意義。 最美好的生活方式,莫過於和...
    香菇妹妹閱讀 310評論 0 0

友情鏈接更多精彩內(nèi)容