Detaillierte Erläuterung der Schritte für LaravelS zur Beschleunigung von Laravel/Lumen durch Swoole

php中世界最好的语言
Freigeben: 2023-03-26 15:42:01
Original
3010 Leute haben es durchsucht

Dieses Mal werde ich Ihnen eine detaillierte Erklärung der Schritte geben, mit denen Laravel/Lumen durch Swoole beschleunigt wird. Was sind die Vorsichtsmaßnahmen für LaravelS, um Laravel/Lumen durch Swoole zu beschleunigen? Fall, werfen wir einen Blick darauf.

LaravelS – Auf den Schultern von Riesen stehen

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

Funktionen

  • Hochleistungs-Swoole

  • Eingebautes HTTP Server

  • Residenter Speicher

  • Reibungsloser Neustart

  • Unterstützt sowohl Laravel als auch Lumen, kompatibel mit Mainstream Versionen

  • Einfach und 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 (Packagist)

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

2. Dienstanbieter hinzufügen

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

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

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

$app->register(Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class);
Nach dem Login kopieren

3. Veröffentlichen Sie die Konfigurationsdatei

php artisan laravels publish
Nach dem Login kopieren

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

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

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

Lauf

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

与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;
 }
}
Nach dem Login kopieren

监听事件

通常,你可以在这些事件中重置或销毁一些全局或静态的变量,也可以修改当前的请求和响应。

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
});
Nach dem Login kopieren

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
});
Nach dem Login kopieren

在你的项目中使用 swoole_http_server 实例

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

注意事项

推荐通过 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();
 //...
}
Nach dem Login kopieren

推荐通过返回 Illuminate\Http\Response 对象来响应请求,兼容echo、vardump()、print_r(), 不能使用 函数像exit()、

die()、header()、setcookie()、http_response_code()。
public function json()
{
 return response()->json(['time' => time()])->header('header1', 'value1')->withCookie('c1', 'v1');
}
Nach dem Login kopieren

你声明的全局、静态变量必须手动清理或重置。

无限追加元素到静态或全局变量中,将导致内存爆满。

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

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

PHP中in_array隐式转换实现步骤详解

php有哪些方法可以输出json对象的值

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Schritte für LaravelS zur Beschleunigung von Laravel/Lumen durch Swoole. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage