ホームページ  >  記事  >  バックエンド開発  >  LaravelS が Swoole を通じて Laravel/Lumen を高速化する方法

LaravelS が Swoole を通じて Laravel/Lumen を高速化する方法

不言
不言オリジナル
2018-06-22 09:54:122519ブラウズ

この記事では、Swoole を介して Laravel/Lumen を高速化するための関連情報を主に紹介します。この記事では、学習や仕事に役立つ特定の学習価値があります。一緒に勉強して勉強してください。

LaravelS - 巨人の肩の上に立つ

この記事では、Laravel/Lumen を高速化するための LaravelS の関連コンテンツを中心に紹介します。 Swoole について:rocket: Swoole を通じて Laravel/Lumen を加速します。S は Swoole、スピード、ハイパフォーマンスを表します。

特長

  • 高性能Swoole

  • 構築-in Http サーバー

  • 常駐メモリ

  • スムーズな再起動

  • Laravel と Lumen の両方をサポート、メインストリーム バージョンと互換性あり

  • シンプルで箱から出してすぐに使用可能

お役に立ちましたら、Star Me LaravelS

要件

依存関係説明 ##PHP>= 5.5.9Swoole>= 1.7.19 から始まる最新の安定バージョンを推奨します2.0.12 PHP5Laravel / Lumen>= 5.1Gzip[オプション]zlib、ローカル libz が利用可能かどうかを確認する ldconfig -p|grep libz
は廃止されましたサポートされている

インストール

1. Composer (packagist) を通じてインストールします

# 在你的Laravel/Lumen项目的根目录下执行
composer require "hhxsv5/laravel-s:~1.0" -vvv
# 确保你的composer.lock文件是在版本控制中

2. サービスプロバイダーを追加します

Laravel: ファイル config/app.php

'providers' => [
 //...
 Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class,
],

Lumen を変更します: ファイル bootstrap/app.php

$app->register(Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class);

3 を変更します。設定ファイル

php artisan laravels publish

を公開します。特殊なケース: LaravelS の最下層である設定 laravels.php を手動でロードする必要はありません。自動的にロードされました。

// 不必手动加载,但加载了也不会有问题
$app->configure('laravels');

4. config/laravels.php の設定を変更します: 監視 IP、ポートなど。「設定項目」を参照してください。

#実行

php artisan laravels {start|stop|restart|reload|publish}

##コマンド指示#startLaravelS を起動し、開始されたプロセスのリストを表示します ps -ef|grep laravelsStop LaravelSLaravel の再起動Sすべてのワーカー プロセスをスムーズに再起動します。ワーカー プロセスにはビジネス コードとフレームワーク (Laravel/Lumen) コードが含まれており、マスター/マネージャー プロセスは再起動されません設定ファイルをプロジェクト、config/laravels.php
upstream laravels {
 server 192.168.0.1:5200 weight=5 max_fails=3 fail_timeout=30s;
 #server 192.168.0.2:5200 weight=3 max_fails=3 fail_timeout=30s;
 #server 192.168.0.3:5200 backup;
}
server {
 listen 80;
 server_name laravels.com;
 root /xxxpath/laravel-s-test/public;
 access_log /yyypath/log/nginx/$server_name.access.log main;
 autoindex off;
 index index.html index.htm;
 
 # Nginx处理静态资源,LaravelS处理动态资源。
 location / {
  try_files $uri @laravels;
 }

 location @laravels {
  proxy_http_version 1.1;
  # proxy_connect_timeout 60s;
  # proxy_send_timeout 60s;
  # proxy_read_timeout 120s;
  proxy_set_header Connection "keep-alive";
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_pass http://laravels;
 }
}
stop
restart
reload
publish
## は Nginx
Listening events

# で使用されます##通常、これらのイベントでは、一部のグローバル変数または静的変数をリセットまたは破棄したり、現在のリクエストと応答を変更したりできます。 laravels.received_request swoole_http_request を Illuminate\Http\Request に変換した後、Laravel カーネルがリクエストを処理する前。

// 修改`app/Providers/EventServiceProvider.php`, 添加下面监听代码到boot方法中
// 如果变量$exents不存在,你也可以调用\Event::listen()。
$events->listen('laravels.received_request', function (\Illuminate\Http\Request $req) {
 $req->query->set('get_key', 'hhxsv5');// 修改querystring
 $req->request->set('post_key', 'hhxsv5'); // 修改post body
});

laravels.generated_response Laravel カーネルがリクエストを処理した後、Illuminate\Http\Response は swoole_http_response に変換されます (次のステップはクライアントに応答することです)。

$events->listen('laravels.generated_response', function (\Illuminate\Http\Request $req, \Symfony\Component\HttpFoundation\Response $rsp) {
 $rsp->headers->set('header-key', 'hhxsv5');// 修改header
});

プロジェクトで swoole_http_server インスタンスを使用する

/**
* @var \swoole_http_server
*/
$swoole = app('swoole');// Singleton
var_dump($swoole->stats());

注意事項

Illuminate\Http \Request オブジェクトを通じて推奨リクエスト情報の取得には、$_SERVER、$_GET、$_POST、$_FILES、$_COOKIE、$_REQUEST、$_SESSION、$_ENV と互換性のあるものは使用できません。

public function form(\Illuminate\Http\Request $request)
{
 $name = $request->input('name');
 $all = $request->all();
 $sessionId = $request->cookie('sessionId');
 $photo = $request->file('photo');
 $rawContent = $request->getContent();
 //...
}
リクエストには、echo、vardump()、print_r() と互換性のある Illuminate\Http\Response オブジェクトを返すことをお勧めします。 exit() や # などの関数は使用できません。 ##
die()、header()、setcookie()、http_response_code()。
public function json()
{
 return response()->json(['time' => time()])->header('header1', 'value1')->withCookie('c1', 'v1');
}
ユーザーがグローバルに宣言した静的変数は、手動でクリーンアップまたはリセットする必要があります。

要素を静的変数またはグローバル変数に無限に追加すると、メモリがいっぱいになります。

// 某类
class Test
{
 public static $array = [];
 public static $string = '';
}

// 某控制器
public function test(Request $req)
{
 // 内存爆满
 Test::$array[] = $req->input('param1');
 Test::$string .= $req->input('param2');
}

TODO

##MySQL/Redis の接続プール。
MySQL/Redis/Http をラップするコルーチン クライアント。

  • Swoole 2.1 の自動コルーチン サポート。

  • 以上がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

  • 関連する推奨事項:
  • laravel フレームワークを使用して検索機能を実装する方法

Laravel フレームワークが検索機能を実装する方法モデル層の CURD 操作


以上がLaravelS が Swoole を通じて Laravel/Lumen を高速化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。