溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在Swoole上運行Laravel的原因是什么

發(fā)布時間:2022-04-26 10:03:07 來源:億速云 閱讀:163 作者:iii 欄目:編程語言

這篇文章主要介紹“在Swoole上運行Laravel的原因是什么”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“在Swoole上運行Laravel的原因是什么”文章能幫助大家解決問題。

Swoole 是為 PHP 開發(fā)的生產(chǎn)級異步編程框架。 他是一個純 C 開發(fā)的擴展, 他允許 PHP 開發(fā)者在 PHP 中寫 高性能,可擴展的并發(fā) TCP, UDP, Unix socket, HTTP, WebSocket 服務(wù), 而不需要擁有太多的非阻塞 I/O 編程和低級別的 Linux 內(nèi)核知識。 你可以把 Swoole 想象成 NodeJS, 但對于 PHP 來說將有更高性能。

為什么要在 Swoole 上運行 Laravel?

下圖展示了 PHP 的生命周期。正如你所看到的那樣,當(dāng)你每次運行 PHP 腳本的時候,PHP都需要初始化模塊并為你的運行環(huán)境啟動Zend引擎。并且將 PHP 腳本編譯為 OpCodes 以便 Zend引擎執(zhí)行。

但是, 這樣的生命周期需要在每次請求的時候都執(zhí)行一遍。因為單個請求創(chuàng)建的環(huán)境在請求執(zhí)行結(jié)束后會立即銷毀。

換句話說, 在傳統(tǒng)的 PHP 生命周期中, 為了腳本執(zhí)行而浪費了大量的時間去創(chuàng)建和銷毀資源。想象一下像 Laravel 這樣的框架, 在每次請求中需要加載多少文件? 同時也浪費了大量的 I/O 操作

因此如果我們利用 Swoole 內(nèi)置一個應(yīng)用級別的 Server, 并且所有腳本文件在加載一次之后便可以保存在內(nèi)存中呢? 這就是為什么我們需要嘗試在 Swoole 上運行 Laravel。 Swoole 可以提供強大性能而 Laravel 則可以提供優(yōu)雅代碼結(jié)構(gòu)使用。這倆兒真是完美組合 !

安裝

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

  • 在 Swoole 運行 Laravel/Lumen 應(yīng)用

  • 出色的性能提升至 30x

  • 沙盒模式隔離應(yīng)用程序容器

  • 支持在 Laravel 應(yīng)用中運行 WebSocket 服務(wù)器

  • 支持 Socket.io 協(xié)議

  • 支持 Swoole 表跨進程共享

使用 Composer 安裝:

$ composer require swooletw/laravel-swoole

這個包依賴于 Swoole 。在使用這個包之前,請確保你的機器安裝了正確的 Swoole 。使用下面的命令快速安裝(linux):

pecl install swoole

在安裝這個擴展之后,你需要編輯 php.ini 添加  extension=swoole.so。

php -i | grep php.ini                      # check the php.ini file location
sudo echo "extension=swoole.so" >> php.ini  # add the extension=swoole.so to the end of php.ini
php -m | grep swoole                       # check if the swoole extension has been enabled

訪問 官網(wǎng) 獲取更多的信息。

注意:Swoole 現(xiàn)在只支持 Linux 和 OSX 。Windows 服務(wù)器現(xiàn)在還不支持。

然后,添加服務(wù)提供者:

如果你使用 Laravel ,在 config/app.php 服務(wù)提供者數(shù)組添加該服務(wù)提供者:

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

如果你使用 Lumen ,請將下面的代碼添加到 bootstrap/app.php

$app->register(SwooleTW\Http\LumenServiceProvider::class);

這個包支持包自動發(fā)現(xiàn)機制。如果你運行 Laravel 5.5 以上版本,你可以跳過這一步。

建立并運行起來

現(xiàn)在,你可以執(zhí)行以下的命令來啟動 Swoole HTTP 服務(wù)。

$ php artisan swoole:http start

然后你可以看到以下信息:

Starting swoole http server...
Swoole http server started: <http://127.0.0.1:1215>

現(xiàn)在可以通過訪問 http://127.0.0.1:1215 來進入 Laravel 應(yīng)用。

基準(zhǔn)測試

使用 MacBook Air 13寸(2015年產(chǎn))及干凈的 Lumen 5.5 項目測試:
基準(zhǔn)測試工具: wrk

wrk -t4 -c100 http://your.app

基于 FPM 的 Nginx

Running 10s test @ http://lumen.app:9999
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     1.14s   191.03ms   1.40s    90.31%
    Req/Sec    22.65     10.65    50.00     65.31%
  815 requests in 10.07s, 223.65KB read
Requests/sec:     80.93
Transfer/sec:     22.21KB

Swoole HTTP 服務(wù)

Running 10s test @ http://127.0.0.1:1215
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    11.58ms    4.74ms  68.73ms   81.63%
    Req/Sec     2.19k   357.43     2.90k    69.50%
  87879 requests in 10.08s, 15.67MB read
Requests/sec:   8717.00
Transfer/sec:      1.55MB

關(guān)于“在Swoole上運行Laravel的原因是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI