Maison > Article > développement back-end > Comment LaravelS accélère Laravel/Lumen via Swoole
Cet article vous présente principalement les informations pertinentes sur LaravelS accélérant Laravel/Lumen via Swoole. L'article le présente en détail à travers l'exemple de code. Il a une certaine valeur d'apprentissage de référence pour les études ou le travail de chacun. ensemble Étudier et étudier.
LaravelS - Debout sur les épaules de géants
Cet article présente principalement le contenu associé de LaravelS pour accélérer Laravel/Lumen via Swoole. À propos de : fusée : Accélérez Laravel/Lumen via Swoole, où le S signifie Swoole, vitesse et hautes performances.
Caractéristiques
Swoole haute performance
Construit -dans le serveur Http
Mémoire résidente
Redémarrage en douceur
Prend en charge à la fois Laravel et Lumen, Compatible avec les versions grand public
Simple, prêt à l'emploi prêt à l'emploi
Si cela vous aide, Star Me LaravelS
Exigences
依赖 | 说明 |
---|---|
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. (packagiste)
# 在你的Laravel/Lumen项目的根目录下执行 composer require "hhxsv5/laravel-s:~1.0" -vvv # 确保你的composer.lock文件是在版本控制中
2. Ajouter un fournisseur de services
Laravel : Modifier le fichier config/app.php
'providers' => [ //... Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class, ],
Lumen : Modifier le fichier bootstrap/app .php
$app->register(Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class);
3. Publier le fichier de configuration
php artisan laravels publish
Cas particulier : Vous n'avez pas besoin de charger manuellement la configuration laravels.php, la couche inférieure de LaravelS a été chargée automatiquement.
// 不必手动加载,但加载了也不会有问题 $app->configure('laravels');
4. Modifiez la configuration config/laravels.php : surveillance de l'IP, du port, etc., veuillez vous référer aux éléments de configuration.
Exécuter
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 |
Utiliser avec Nginx
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; } }
Écoute événements
Habituellement, vous pouvez réinitialiser ou détruire certaines variables globales ou statiques dans ces événements, ou modifier la requête et la réponse actuelles.
laravels.received_request convertit swoole_http_request en IlluminateHttpRequest avant que le noyau Laravel ne traite la requête.
// 修改`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 Une fois que le noyau Laravel a traité la requête, IlluminateHttpResponse est converti en swoole_http_response (l'étape suivante sera de répondre au client).
$events->listen('laravels.generated_response', function (\Illuminate\Http\Request $req, \Symfony\Component\HttpFoundation\Response $rsp) { $rsp->headers->set('header-key', 'hhxsv5');// 修改header });
Utilisez l'instance swoole_http_server dans votre projet
/** * @var \swoole_http_server */ $swoole = app('swoole');// Singleton var_dump($swoole->stats());
Notes
Recommandé Obtenir les informations de la demande via l'objet IlluminateHttpRequest. Il est compatible avec $_SERVER, $_GET, $_POST, $_FILES, $_COOKIE et $_REQUEST et $_ENV ne peut pas être utilisé.
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(); //... }
Il est recommandé de répondre à la requête en renvoyant l'objet IlluminateHttpResponse, qui est compatible avec echo, vardump(), print_r(). Vous ne pouvez pas utiliser de fonctions comme exit(),
<.>die()、header()、setcookie()、http_response_code()。 public function json() { return response()->json(['time' => time()])->header('header1', 'value1')->withCookie('c1', 'v1'); }global que vous déclarez, les variables statiques doivent être nettoyées ou réinitialisées manuellement.
// 某类 class Test { public static $array = []; public static $string = ''; } // 某控制器 public function test(Request $req) { // 内存爆满 Test::$array[] = $req->input('param1'); Test::$string .= $req->input('param2'); }
TODO
Comment utiliser le framework Laravel pour implémenter la fonction de recherche
Comment le framework Laravel implémente le Fonctionnement CURD de la couche modèle
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!