この記事の内容は詳細にlaravelアプリケーションを高速化するためにswoole動作モードをもたらすことで、困っている友達を参照することができ、いくつかの基準値は、私はあなたの助けを期待、そこにあります。
A、Swoole
既知SwooleそれはPHPは、非同期実行、ちょうど同じノードでなく、ソケットの使用を使用することがPHPの拡張である、PHPを再定義し、PHP、イベント駆動型、並列データ構造と関数として非同期IOの範囲を提供します。
Swoole4は、同期コードが完全に非同期プログラムを使用することができ、完全なコルーチンのプログラミングモードをサポートしています。自動的に基本的なコルーチン、非同期IOをスケジュールする任意の追加のキーワードなしでPHPコード、。
ほとんど常に実現達成可能swoole、およびnodejsよりも高いパフォーマンスをnodejs、すべての後に、シングルスレッドnodejsない完全なCPU性能である、swooleは、CPUをフルに活用するためにマルチスレッド化されています。
伝統的なLAMP / LNMP同期開発モデルに加えて、違いは何ですか伝統的なWeb開発と効率的なSwooleは、swoole非同期開発モデルは、どのように生産性を維持する方法はありますか?
第二には、従来のWeb開発モデル
PHPのWeb開発方法は、LAMP / LNMPアーキテクチャ、つまりLinuxでは、Nginxは、MySQLとPHPを使用しています。nginxのに一般的な構造として、本明細書中に例示:
リクエストはPHP-FPMに、ウェブサーバに転送要求に来ると、PHP-FPMは、FastCGIプロセスプールサービスアーキテクチャ、構築されたPHPインタプリタです。FPM責任解釈PHPファイルは、応答を生成し、最終的には前に示した、Webサーバに返します。MySQLとのNoSQLへのアクセスなど、ビジネス・ロジックの数を、達成するためのPHPファイルは、その上のサードパーティ製のアプリケーションを呼び出して。
このような構造のphp-FPMとnginxのフィット感は十分に実行されていますが、PHP-FPM自体は、同期のブロッキングプロセスモデル、リクエストの最後に(オブジェクトフレームのシリーズの最初の作成を含む)すべてのリソースの解放、PHPでのプロセスの結果であるため、 「アイドル」(作成した< - > < - >破壊作成は)限られたスループット容量スタンドアローンで、その結果、CPUリソースを大量に消費します。
すべての要求処理プロセス手段そのPHPファイルの解析、PHPでのパフォーマンスの最適化プログラムを達成するために、接続プーリング技術を使用することはできませんPHPのプロセスを破壊するために処理され、環境設定やその他の不必要な時間のかかる操作。
三、Swoole動作モード
伝統的な建築の問題のため、上記の問題を解決するためのPHP拡張からswooleは、swooleプロセスモデルのために、私たちは前に理解する必要があります。
伝統的な建築様式と比較すると、そのマルチスレッド原子炉モードでの最大の特徴Swooleプロセスモデルの嘘は、それが簡単に多数の接続に対応できるように、ネットワーク要求を処理します。
追加の利点は次のとおりです。
全非ブロック非同期、小さなフットプリントのコスト、プログラムの実行の高効率
だけは、一度ロードされたの解析PHPファイルを実行すると、各要求をロード繰り返さないようにするには
永久的なプロセス要求および可能な接続のプールとの間の情報伝送を達成するように
第四に、なぜ?SwooleでLaravelを実行する必要があります
ので、開発プロセスでは、我々は良いの多くは、車輪行われているがあることがわかります、生態環境の外に、その名前と相まって、あなたは多くのファイルをロードする必要があるときに起動するLaravelフレームワークを、これもLaravel特に高いディスクIOの最初のスタートになります(ファイルが事の多くをロードすることです)
Laravelのライフサイクルは、すべての要求を再度実行する必要があります。環境を作成するための単一の要求は、要求実行直後に破棄されますので。
言い換えれば、スクリプトを実行するためにPHPの伝統的なライフサイクルでは、リソースを作成し、破壊するために多くの時間を無駄にしました。各要求O操作上のファイルをロードする必要がありますか?しかし、また、I /の多くを無駄にどのように多く、Laravelのようなフレームワークを想像してみてください。
我々はSwooleを使用するのであれば、アプリケーションレベルのサーバーを構築し、すべてのスクリプトファイルの読み込み時間の後に、あなたはそれをメモリに保持することができますか?我々はSwoole Laravel上で実行しようとする必要がある理由です。Swooleは、強力なパフォーマンスを提供することができ、エレガントなLaravelは、コードの構造を使用することができます。たぶん子供たちは本当に完璧な組み合わせです!
第五は、パフォーマンスの強化Laravel Swooleを使用する
既存の車輪を、次の二つの感触はあなたが選ぶことができ、まだ非常に良いです
-
swooletw / laravel- swoole garveen / laravoole
私がテストするために最初のものを選んだ
の使用コンポーザーのインストールを:
作曲はswooletw / laravel-swooleが必要です
あなたがlaravelを使用している場合は、設定/ app.php中のプロバイダの配列を追加
SwooleTW \のHttp \ LaravelServiceProvider :: クラス、
あなたは、内腔を使用している場合は、ブートストラップ/ app.php中に次のコードを追加します
$ APP->登録(SwooleTW \のHttp \ LumenServiceProvider :: クラス)。
configディレクトリに設定ファイルをエクスポートします。
PHPの職人ベンダー:公開--provider = " SwooleTW \のHttp \ HttpServiceProvider "
その後のconfig / swoole_http.phpの構成情報を行きます
' サーバー' => [ ' ホスト' => ENV(' SWOOLE_HTTP_HOST '、' 0.0.0.0 ')、// 监听任意のIP ' ポート' => ENV(' SWOOLE_HTTP_PORT '、' 1215 ' )、 ' オプション' => 【 ' pid_file ' => ENV(' SWOOLE_HTTP_PID_FILE '、BASE_PATH(' ストレージ/ログ/ swoole_http.pid '))、 "LOG_FILE ' => ENV(' SWOOLE_HTTP_LOG_FILE 'BASE_PATH( ' ストレージ/ログ/ swoole_http.log ' ))、 ' デーモン化する' => ENV(' SWOOLE_HTTP_DAEMONIZEを"、1)、// デーモンとしてバックグラウンドに1-プログラム実行し 、] 、]
swoole_http.phpまた、プロバイダのアレイを提供することが設定されています
' プロバイダ' => [ // アプリケーション\プロバイダ\ AuthServiceProvider ::クラス、 ]
すべてのリクエストは、プロバイダの再登録および再開始したい、ここでの設定ので、HTTPなどの使用swoole後、これらのプロバイダは、メモリに保存されますので。
さて、あなたはSwoole HTTPサービスを開始するには、次のコマンドを実行することができます。
$ phpの職人swooleます:http開始
そして、次の情報を見ることができます:
swoole HTTPサーバー開始しています... Swoole HTTP Serverが開始しました: <のhttp:// 0.0.0.0:1215>
今、あなたはを介してアクセスすることができます HTTP:// 127.0.0.1:1215を Laravelアプリケーションを入力します。
注:この拡張は、ホットスタートをサポートしていないので、毎回コードの更新は、サービスを再起動する必要がありますPHP職人swooleます:http再起動
シックス・パフォーマンス・テスト
ApacheのABテストツールを使用して
AB -n 1000年 -c 10のhttp:// 127.0.0.1:1215/
パラメータ:-n 1000の-c 10件の同時リクエスト数
アプリケーションサーバとして図の一つの使用swoole、Apacheサーバ図IIがされ
、仮想マシン内のコンピュータの設定をテスト環境パフォーマンスの低下が十分に出て遊んでいませんもあり、あなただけの197回Apacheの完全な要求は、圧力にswooleを運ぶことができませんでした見ることができますHTTPサービスは、圧力試験を完了し、機能不全は完全にApacheサーバをロールバックされます。
nginxのプロキシを使用して七、
swooleも公式サイトで言及さ:swoole_http_serverサポートのHttpプロトコルは、それが唯一のアプリケーションサーバとして推奨され、完全ではありません。そして、フロントエンドnginxのエージェントとして増加します。
そこで、我々は、サーバーの増加nginx.conf設定する必要があります。
1 server { 2 3 listen 80; 4 5 server_name your.domain.com; 6 7 root /path/to/laravel/public; 8 9 index index.php; 10 11 12 13 location = /index.php { 14 15 # Ensure that there is no such file named "not_exists" 16 17 # in your "public" directory. 18 19 try_files /not_exists @swoole; 20 21 } 22 23 24 25 location / { 26 27 try_files $uri $uri/ @swoole; 28 29 } 30 31 32 33 location @swoole { 34 35 set $suffix ""; 36 37 38 39 if ($uri = /index.php) { 40 41 set $suffix "/"; 42 43 } 44 45 46 47 proxy_set_header Host $host; 48 49 proxy_set_header SERVER_PORT $server_port; 50 51 proxy_set_header REMOTE_ADDR $remote_addr; 52 53 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 54 55 56 57 # IF https 58 59 # proxy_set_header HTTPS "on"; 60 61 62 63 proxy_pass http://127.0.0.1:1215$suffix; 64 65 } 66 67 }
配置可参考swoole方文档官 Nginx/Apache配置
至此,大功告成,你可以像平常一样访问你的网站了。
八、使用swoole和传统php开发的缺点
本文主要介绍了使用swoole作为laravel的应服务器,最后说下使用swoole和传统php开发的缺点。
1、更难上手。这要求开发人员对于多进程的运行模式有更清晰的认识
2、更容易内存泄露。在处理全局变量,静态变量的时候一定要小心,这种不会被GC清理的变量会存在整个生命周期中,如果没有正确的处理,很容易消耗完所有的内存。在php-fpm下,php代码执行完内存就会被完全释放。
以上就是swoole运行模式加速laravel应用的详细介绍的详细内容