Heim  >  Artikel  >  Backend-Entwicklung  >  Wie LaravelS Laravel/Lumen durch Swoole beschleunigt

Wie LaravelS Laravel/Lumen durch Swoole beschleunigt

不言
不言Original
2018-06-22 09:54:122518Durchsuche

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zur Beschleunigung von Laravel/Lumen durch den Beispielcode ein. Es hat einen gewissen Referenz-Lernwert für alle, die es brauchen zusammen Studieren und studieren.

LaravelS – Auf den Schultern von Riesen stehen

In diesem Artikel werden hauptsächlich die zugehörigen Inhalte von LaravelS vorgestellt, um Laravel/Lumen durchzubeschleunigen Swoole. Über:Rakete: Beschleunigen Sie Laravel/Lumen durch Swoole, wobei das S für Swoole, Geschwindigkeit und hohe Leistung steht.

Eigenschaften

  • Hochleistungswolle

  • Gebaut -in HTTP-Server

  • Residenter Speicher

  • Reibungsloser Neustart

  • Unterstützt sowohl Laravel als auch Lumen. Kompatibel mit Mainstream-Versionen

  • Einfach, sofort einsatzbereit

Wenn es Ihnen hilft, Star Me LaravelS

Anforderungen

依赖 说明
PHP >= 5.5.9
Swoole >= 1.7.19 推荐最新的稳定版 从2.0.12开始不再支持PHP5
Laravel / Lumen >= 5.1
Gzip[可选的] zlib , 检查本机libz是否可用 ldconfig -p|grep libz

Installation

1. Installation über Composer (Paketist)

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

2. Dienstanbieter hinzufügen

Laravel: Ändern Sie die Datei config/app.php

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

Lumen: Ändern Sie die Datei bootstrap/app.php

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

3. Veröffentlichen Sie die Konfigurationsdatei

php artisan laravels publish

Sonderfall: Sie müssen die Konfiguration laravels.php nicht manuell laden, die unterste Ebene von LaravelS wurde automatisch geladen.

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

4. Ändern Sie die Konfiguration config/laravels.php: Überwachung von IP, Port usw., siehe Konfigurationselemente.

Ausführen

php artisan laravels {start|stop|restart|reload|publish}
命令 说明
start 启动LaravelS,展示已启动的进程列表 ps -ef|grep laravels
stop 停止LaravelS
restart 重启LaravelS
reload 平滑重启所有worker进程,这些worker进程内包含你的业务代码和框架(Laravel/Lumen)代码,不会重启master/manger进程
publish 发布配置文件到你的项目中 config/laravels.php

Mit Nginx verwenden

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;
 }
}

Auf Ereignisse achten

Normalerweise können Sie in diesen Ereignissen einige globale oder statische Variablen zurücksetzen oder zerstören oder die aktuelle Anfrage und Antwort ändern.

laravels.received_request konvertiert swoole_http_request in IlluminateHttpRequest, bevor der Laravel-Kernel die Anfrage verarbeitet.

// 修改`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 Nachdem der Laravel-Kernel die Anfrage verarbeitet hat, bevor IlluminateHttpResponse in swoole_http_response konvertiert wird (der nächste Schritt besteht darin, dem Client zu antworten).

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

Verwenden Sie die swoole_http_server-Instanz in Ihrem Projekt

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

Notizen

Es wird empfohlen, IlluminateHttpRequest zu verwenden Objekt Anforderungsinformationen abrufen, kompatibel mit $_SERVER, $_GET, $_POST, $_FILES, $_COOKIE, $_REQUEST, $_SESSION, $_ENV, kann nicht verwendet werden.

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();
 //...
}

Es wird empfohlen, auf die Anfrage durch die Rückgabe des IlluminateHttpResponse-Objekts zu antworten, das mit echo, vardump(), print_r() kompatibel ist. Sie können keine Funktionen wie exit(),

die()、header()、setcookie()、http_response_code()。
public function json()
{
 return response()->json(['time' => time()])->header('header1', 'value1')->withCookie('c1', 'v1');
}
Die von Ihnen deklarierten globalen und statischen Variablen müssen manuell bereinigt oder zurückgesetzt werden.


Das unendliche Anhängen von Elementen an statische oder globale Variablen führt dazu, dass der Speicher voll wird.

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

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

TODO

  • Verbindungspool für MySQL/Redis.

  • Coroutine-Client, der MySQL/Redis/Http umschließt.

  • Automatische Coroutine-Unterstützung für Swoole 2.1+.

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

So verwenden Sie das Laravel-Framework, um die Suchfunktion zu implementieren

Wie das Laravel-Framework die implementiert CURD-Operation der Modellschicht

Das obige ist der detaillierte Inhalt vonWie LaravelS Laravel/Lumen durch Swoole beschleunigt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn