이번에는 LaravelS가 Swoole을 통해 Laravel/Lumen을 가속화하는 단계에 대해 자세히 설명하겠습니다. LaravelS가 Swoole을 사용하여 Laravel/Lumen을 가속화하는 데 있어 주의 사항은 무엇입니까? 다음은 실제 사례입니다.
LaravelS - 거인의 어깨 위에 서기
이 글에서는 Swoole을 통해 Laravel/Lumen을 가속화하는 LaravelS 관련 콘텐츠를 주로 소개합니다. about:rocket: Accelerate Laravel/Lumen through Swoole, 여기서 S는 Swoole을 의미하며, 속도, 고성능.
기능
고성능 Swoole
내장 HTTP 서버
상주 메모리
부드러운 재시작
주류 버전과 호환되는 Laravel과 Lumen을 모두 지원합니다.
간단하고 즉시 사용 가능
도움이 된다면 Star Me LaravelS
Requirements
Dependities | 지침 |
---|---|
PHP | >= 5.5 .9 |
Swoole | >= 1.7.19 최신 안정 버전 권장 PHP5는 2.0.12 |
Laravel / Lumen | >= 5.1 |
Gzip[ 선택사항] | zlib, 로컬 libz가 사용 가능한지 확인 ldconfig -p|grep libz |
Installation
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 파일 수정 config 파일
php artisan laravels publish
을 게시합니다. 특별한 경우: 필요하지 않습니다. laravels.php 구성을 수동으로 로드하기 위해 LaravelS의 하단 레이어는 Auto loading으로 설정되었습니다.
// 不必手动加载,但加载了也不会有问题 $app->configure('laravels');
4. config/laravels.php 구성 수정: IP, 포트 등 모니터링, 구성 항목을 참조하세요.
Run
php artisan laravels {start|stop|restart|reload|publish}
Command | Instructions |
---|---|
start | LaravelS를 시작하고 시작된 프로세스 목록 표시 ps -ef|grep laravels |
stop | LaravelS 중지 |
restart | Restart LaravelS |
reload | 모든 작업자 프로세스를 원활하게 다시 시작하세요. 이러한 작업자 프로세스에는 비즈니스 코드와 프레임워크(Laravel/Lumen) 코드가 포함되어 있으며 마스터/관리자 프로세스는 다시 시작되지 않습니다 |
게시 | 구성 파일을 프로젝트 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; } }
监听事件
通常,你可以在这些事件中重置或销毁一些全局或静态的变量,也可以修改当前的请求和响应。
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(); //... }
推荐通过返回 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'); }
你声明的全局、静态变量必须手动清理或重置。
无限追加元素到静态或全局变量中,将导致内存爆满。
// 某类 class Test { public static $array = []; public static $string = ''; } // 某控制器 public function test(Request $req) { // 内存爆满 Test::$array[] = $req->input('param1'); Test::$string .= $req->input('param2'); }
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
위 내용은 LaravelS가 Swoole을 통해 Laravel/Lumen을 가속화하는 단계에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!