LaravelS uses Swoole to accelerate Laravel/Lumen.
LaravelS-standing on the shoulders of giants
This article describes how LaravelS uses Swoole to accelerate Laravel/Lumen. For details, refer to: rocket: Uses Swoole to accelerate Laravel/Lumen. S represents Swoole, with high speed and performance.
Features
- High-performance Swoole
- Built-in Http Server
- Resident memory
- Smooth restart
- Supports Laravel and Lumen, and is compatible with mainstream versions.
- Simple and out-of-the-box
If it is helpful to you, Star Me LaravelS
Requirements
Dependency |
Description |
PHP |
> = 5.5.9 |
Swoole |
> = 1.7.19 the latest stable version is recommended. PHP5 is no longer supported since 2.0.12. |
Laravel/Lumen |
& Gt; = 5.1 |
Gzip [Optional] |
Zlib, check whether the local libz is available ldconfig-p | grep libz |
Install
1. Install packagist through Composer)
# Run composer require "hhxsv5/Laravel-s: ~ in the root directory of your laravel/Lumen Project :~ 1.0 "-vvv # Make sure that your composer. lock file is in Version Control
2. Add service provider
Laravel: Modify the config/app. php file.
'providers' => [ //... Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class,],
Lumen: Modify the bootstrap/app. php file.
$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 and configure laravels. php. LaravelS is automatically loaded at the underlying layer.
// You do not need to manually load the file, but it does not have to be loaded. $ app-> configure ('laravels ');
4. Modify the config/laravels. php: the IP address and port of the listener. For more information, see configuration items.
Run
php artisan laravels {start|stop|restart|reload|publish}
Command |
Description |
Start |
Start LaravelS to display the list of started processes ps-ef | grep laravels |
Stop |
Stop LaravelS |
Restart |
Restart LaravelS |
Reload |
Smoothly restart all worker processes. These worker Processes contain your business code and framework (Laravel/Lumen) Code and do not restart the master/manger process. |
Publish |
Publish the configuration file to your project config/laravels. php |
Use with Nginx
Upstream laravels {server 192.168.0.1: 5200 weight = 5 max_fails = 3 fail_timeout = 30 s; # server 192.168.0.2: 5200 weight = 3 max_fails = 3 fail_timeout = 30 s; # 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 processes static resources and LaravelS processes dynamic resources. Location/{try_files $ uri @ laravels;} location @ laravels {proxy_http_version 1.1; # proxy_connect_timeout 60 s; # limit 60 s; # proxy_read_timeout 120 s; proxy_set_header Connection "keep-alive "; proxy_set_header X-Real-IP $ remote_addr; proxy_set_header Host $ host; proxy_pass http: // laravels ;}}
Listen to events
Generally, You can reset or destroy some global or static variables in these events, or modify the current request and response.
Laravels. received_request converts swoole_http_request to Illuminate \ Http \ Request, before the Laravel kernel processes the Request.
// Modify 'app/Providers/EventServiceProvider. php, add the following listening code to the boot Method // If the variable $ exents does not exist, you can also call \ Event: listen (). $ Events-> listen ('laravels. received_request ', function (\ Illuminate \ Http \ Request $ req) {$ req-> query-> set ('get _ key', 'hhxsv5 '); // modify querystring $ req-> request-> set ('Post _ key', 'hhxsv5'); // modify post body });
Laravels. generated_response after the Laravel kernel processes the request, convert Illuminate \ Http \ Response to swoole_http_response (the next step is to send the Response to the client ).
$ Events-> listen ('laravels. generated_response ', function (\ Illuminate \ Http \ Request $ req, \ Symfony \ Component \ HttpFoundation \ Response $ rsp) {$ rsp-> headers-> set ('header-key', 'hhxsv5'); // modify header });
Use swoole_http_server instance in your project
/*** @var \swoole_http_server*/$swoole = app('swoole');// Singletonvar_dump($swoole->stats());
Notes
We recommend that you use the Illuminate \ Http \ Request object to obtain REQUEST information. It is compatible with $ _ SERVER, $ _ GET, $ _ POST, $ _ FILES, $ _ COOKIE, and $ _ Request, $ _ SESSION and $ _ ENV cannot be used.
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(); //...}
It is recommended to return the Illuminate \ Http \ Response object to respond to the request. It is compatible with echo, vardump (), print_r (), and cannot use functions such as exit (),
die()、header()、setcookie()、http_response_code()。public function json(){ return response()->json(['time' => time()])->header('header1', 'value1')->withCookie('c1', 'v1');}
The global and static variables you declare must be manually cleared or reset.
If you append an element to a static or global variable infinitely, the memory is full.
// Class Test {public static $ array = []; public static $ string = '';} // a controller public function test (Request $ req) {// memory full Test: $ array [] = $ req-> input ('param1'); Test: $ string. = $ req-> input ('param2 ');}
To-do list
- Connection Pool for MySQL/Redis.
- The coroutine client that encapsulates MySQL, Redis, and Http.
- For Swoole 2.1 + automatic coroutine support.
Summary
The above is all the content of this article. I hope the content of this article has some reference and learning value for everyone's learning or work. If you have any questions, please leave a message to us, thank you for your support.