Laravel-S 项目之初体验
一、前言
最近看到社区里很多人都在讨论 Laravel-S
,我也去 Github 上查看了一下该项目,其实 Laravel-S
是快速集成 Swoole
到 Laravel
或 Lumen
,然后赋予它们更好的性能、更多可能性的一个胶水项目。我今天正好空闲下来,心想还是测试一波,看看性能会不会有提升呢?
二、创建 Laravel 项目
1、新建项目
laravel new laravel-S
或者使用
composer create-project laravel/laravel laravel-S --prefer-dist "6.2.*"
进行新建项目
2、配置好 .env
文件
配置如下:
APP_NAME=laravel-s
APP_ENV=local
APP_KEY=base64:aQ/ykVTPt/++KGQ27oRw6Y3SeACoCyzJOHaNlSumymY=
APP_DEBUG=true
APP_URL=http://laravel-s.test
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_s
DB_USERNAME=root
DB_PASSWORD=root
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
注意:这里主要配置好数据库连接和 APP_URL
,其他的配置项,新建项目时默认带有了
3、配置Nginx服务器
新建一个 Nginx
配置文件,写入如下配置(这里根据你自己的项目配置,能访问到项目即可)
我的 Nginx
配置文件如下:
server {
listen 80;
client_max_body_size 512m;
root /Users/liangguifeng/www/laravel-S/public;
index index.php index.html index.htm;
server_name laravel-s.test;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
4、初次访问我们的项目,如下图,那么基本的配置就完成了
三、安装laravel-S胶水项目到我们的 Laravel 项目上
1、通过 Composer
安装
composer require "hhxsv5/laravel-s:~3.5.0" -vvv
2、注册 Service Provider
(以下两步二选一)。
-
Laravel
: 修改文件config/app.php
,Laravel 5.5+支持包自动发现,你应该跳过这步
'providers' => [ //... Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class, ],
-
Lumen
: 修改文件bootstrap/app.php
$app->register(Hhxsv5\LaravelS\Illuminate\LaravelSServiceProvider::class);
3、发布配置和二进制文件。
php artisan laravels publish
4、运行
php bin/laravels start
5、运行成功后如图:
运行结果:
访问成功:
四、执行ab压测
1、新开一个命令行窗口,测试Nginx服务器下Laravel的并发量:
命令如下:
ab -n 2000 -c 100 http://laravel-s.test/
注意:上面那个命令一般是我们最常用的的,意思是对 http://laravel-s.test/ 的主页发送 2000 个请求 (-n 代表发多少请求) 100 个并发 (-c 代表并发的请求)
测试如图:
2、然后继续测试继承laravel-S的laravel
命令如下:
ab -n 2000 -c 100 http://127.0.0.1:5200/
注意:上面那个命令一般是我们最常用的的,意思是对 http://laravel-s.test/ 的主页发送 2000 个请求 (-n 代表发多少请求) 100 个并发 (-c 代表并发的请求)
测试如图:
五、结语
1、首先我们来看一下这两个数据的对比吧,如下图:
左边是 Nginx
的压测结果,右边是集成 Laravel-S
的laravel压测结果
2、总结
从图中我们可以看到,集成了 laravel-S
的 Laravel
框架确实快了很多很多,但是最近看到社区中使用 laravel-S
的用户,碰到了很多问题,但是集成了 Swoole
后速度确实上升了很多,希望 laravel-S
的作者继续去完善,同时大家想要把自己的项目加上 laravel-S
也要慎重考虑,文章到这里就结束了,我也没什么好说的,毕竟我也是个菜鸟,如果文章中有做得不对的地方和写的不对的地方欢迎大家指出!
3、鸣谢
本作品采用《CC 协议》,转载必须注明作者和本文链接
个人感觉,类似这样的胶水项目 ,至少自己可以完全能把持住着两样东西,才会在自己的项目里实践吧。不然就是一堆未知又没有头绪的问题 ...
用户认证一类的呢,需要有所修改吗?
我今天也在搞这个,我是 Laradock 环境。在配置了 Inotify 扩展后发现 workspace 再运行
启动不了 apt-get 直接中断掉了。还在继续爬坑!
请教两个问题:
1,使用laravelS和laravel-excel("maatwebsite/excel": "^3.1"),会报这样的错,尝试在报错位置加入try...catch,依然无法解决这个问题!如图所示的报错信息!
2,laravel自带的export中的exit会导致swoole进程退出。官方文档:https://wiki.swoole.com/wiki/page/501.html),
请问在这里,ENV常量和Swoole\ExitException怎么去实现!
function swoole_exit($msg)
{
}
有兴趣可以直接尝试 基于 swoole 扩展的框架。swoft、easyswoole、 hyperf 这些都是不错的。对常驻进程编程、php 进阶很不错!
这种自己玩玩就好了,在公司项目用会被坑死的,别问我怎么知道的。。
过来看看大家踩过的坑
swoole衍生框架中最可怕的是遇到内存泄漏的问题,别问我是怎么知道的
如果只是做接口服务,有没有哪位兄台调整支持协程呢?是不是把db、redis改连接池即可
请问这个可以平滑重启吗,每次修改代码都要Ctrl + c吗 :joy:
请问怎么输出变量到控制台呢?
刚刚新开了个
laravel-s
项目。确实var_dump
不行,得用laravel
的方法,比如封装好的dump()
@蜡笔小新刚刚查看了
laravel-s
的文档,文档中有说,如图:不太建议用于生产 除非你对swoole与laravel了解的很通透 否则 你上生产你会发现各种各样的坑。还是建议用swoole的几个专门的框架比较可靠些
生产环境用了很久了
可以用,就是第三方包估计要注意一点