Home >Backend Development >PHP Tutorial >Detailed explanation of the steps for LaravelS to accelerate Laravel/Lumen through Swoole

Detailed explanation of the steps for LaravelS to accelerate Laravel/Lumen through Swoole

php中世界最好的语言
php中世界最好的语言Original
2018-05-18 14:19:293038browse

This time I will bring you a detailed explanation of the steps for LaravelS to accelerate Laravel/Lumen through Swoole. What are the precautions for LaravelS to accelerate Laravel/Lumen through Swoole. The following is a practical case, let's take a look.

LaravelS - Standing on the shoulders of giants

This article mainly introduces the related content of LaravelS to accelerate Laravel/Lumen through Swoole, about: rocket : Accelerate Laravel/Lumen through Swoole, where the S stands for Swoole, speed, and high performance.

Features

  • High performance Swoole

  • Built-in Http server

  • Resident memory

  • Smooth restart

  • Supports both Laravel and Lumen, compatible with mainstream versions

  • Simple, works out of the box

If it helps, Star Me LaravelS

Requirements

##Laravel / Lumen>= 5.1##Gzip[optional]
Dependencies Description
PHP >= 5.5.9
Swoole >= 1.7.19 Recommended latest stable version No longer supported starting from 2.0.12 PHP5
zlib, check whether the local libz is available ldconfig -p|grep libz
##Installation

1. Install through Composer (packagist)

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

Laravel: Modify the file config/app.php

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

bootstrap

/app.php

$app->register(Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class);
3. Publish the configuration file

php artisan laravels publish
Special case: You do not need to manually load the configuration laravels.php, the bottom layer of LaravelS has beenautomatically load.

// 不必手动加载,但加载了也不会有问题
$app->configure('laravels');
4. Modify the configuration config/laravels.php: monitoring IP, port, etc., please refer to Configuration Items.

Run

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

##CommandInstructionsstartStart LaravelS and display the list of started processes ps -ef|grep laravelsStop LaravelSRestart LaravelSRestart all worker processes smoothly, These worker processes contain your business code and framework (Laravel/Lumen) code and will not restart the master/manger processPublish the configuration file to your In the project config/laravels.php
stop
restart
reload
publish

与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中文网其它相关文章!

推荐阅读:

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

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

The above is the detailed content of Detailed explanation of the steps for LaravelS to accelerate Laravel/Lumen through Swoole. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn