詳細laravelの応用を加速するswoole動作モード

この記事の内容は詳細に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>

 

今、あなたはを介してアクセスすることができます   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应用的详细介绍的详细内容

おすすめ

転載: www.cnblogs.com/a609251438/p/12078354.html