Laravel-S 项目之初体验

一、前言

最近看到社区里很多人都在讨论 Laravel-S,我也去 Github 上查看了一下该项目,其实 Laravel-S 是快速集成 SwooleLaravelLumen,然后赋予它们更好的性能、更多可能性的一个胶水项目。我今天正好空闲下来,心想还是测试一波,看看性能会不会有提升呢?

二、创建 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

三、安装laravel-S胶水项目到我们的 Laravel 项目上

1、通过 Composer 安装
composer require "hhxsv5/laravel-s:~3.5.0" -vvv
2、注册 Service Provider(以下两步二选一)。
  • Laravel: 修改文件config/app.phpLaravel 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、运行成功后如图:

运行结果:
Laravel-S 项目之初体验
访问成功:
Laravel-S 项目之初体验

四、执行ab压测

1、新开一个命令行窗口,测试Nginx服务器下Laravel的并发量:

命令如下:

ab -n 2000 -c 100 http://laravel-s.test/

注意:上面那个命令一般是我们最常用的的,意思是对 http://laravel-s.test/ 的主页发送 2000 个请求 (-n 代表发多少请求) 100 个并发 (-c 代表并发的请求)

测试如图:

Laravel-S 项目之初体验

2、然后继续测试继承laravel-S的laravel

命令如下:

ab -n 2000 -c 100 http://127.0.0.1:5200/

注意:上面那个命令一般是我们最常用的的,意思是对 http://laravel-s.test/ 的主页发送 2000 个请求 (-n 代表发多少请求) 100 个并发 (-c 代表并发的请求)

测试如图:

Laravel-S 项目之初体验

五、结语

1、首先我们来看一下这两个数据的对比吧,如下图:

Laravel-S 项目之初体验
左边是 Nginx 的压测结果,右边是集成 Laravel-S 的laravel压测结果

2、总结

从图中我们可以看到,集成了 laravel-SLaravel 框架确实快了很多很多,但是最近看到社区中使用 laravel-S 的用户,碰到了很多问题,但是集成了 Swoole 后速度确实上升了很多,希望 laravel-S 的作者继续去完善,同时大家想要把自己的项目加上 laravel-S 也要慎重考虑,文章到这里就结束了,我也没什么好说的,毕竟我也是个菜鸟,如果文章中有做得不对的地方和写的不对的地方欢迎大家指出!

3、鸣谢
本作品采用《CC 协议》,转载必须注明作者和本文链接
犯二青年
本帖由系统于 4年前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 52

个人感觉,类似这样的胶水项目 ,至少自己可以完全能把持住着两样东西,才会在自己的项目里实践吧。不然就是一堆未知又没有头绪的问题 ...

4年前 评论
犯二青年 (楼主) 4年前
1936 1年前

用户认证一类的呢,需要有所修改吗?

4年前 评论
犯二青年 (楼主) 4年前
captain2021 (作者) 4年前
犯二青年 (楼主) 4年前
QiFengLe_ 4年前
captain2021 (作者) 4年前

我今天也在搞这个,我是 Laradock 环境。在配置了 Inotify 扩展后发现 workspace 再运行

 docker-compose up -d --build --force-recreate workspace

启动不了 apt-get 直接中断掉了。还在继续爬坑!

4年前 评论
犯二青年 (楼主) 4年前
Icy (作者) 4年前
犯二青年 (楼主) 4年前

file
请教两个问题:
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)

{

//php-fpm的环境

if (ENV=='php')
{
    exit($msg);
}
//swoole的环境
else
{
    throw new Swoole\ExitException($msg);
}

}

4年前 评论
犯二青年 (楼主) 4年前
她来听我的演唱会 (作者) 4年前
她来听我的演唱会 (作者) 4年前
犯二青年 (楼主) 4年前
yinxiaoqiang 4年前
她来听我的演唱会 (作者) 4年前
yinxiaoqiang 4年前
她来听我的演唱会 (作者) 4年前

有兴趣可以直接尝试 基于 swoole 扩展的框架。swofteasyswoolehyperf 这些都是不错的。对常驻进程编程、php 进阶很不错!

4年前 评论
犯二青年 (楼主) 4年前

这种自己玩玩就好了,在公司项目用会被坑死的,别问我怎么知道的。。

4年前 评论
犯二青年 (楼主) 4年前
heNry_o3o (作者) 4年前
犯二青年 (楼主) 4年前
heNry_o3o (作者) 4年前
犯二青年 (楼主) 4年前
DonSen 4年前
Fly-allenbin 3年前
王小大 7个月前
lufeijun1234

过来看看大家踩过的坑

4年前 评论

swoole衍生框架中最可怕的是遇到内存泄漏的问题,别问我是怎么知道的

4年前 评论
犯二青年 (楼主) 4年前

如果只是做接口服务,有没有哪位兄台调整支持协程呢?是不是把db、redis改连接池即可

3年前 评论

请问这个可以平滑重启吗,每次修改代码都要Ctrl + c吗 :joy:

3年前 评论

请问怎么输出变量到控制台呢?

3年前 评论
犯二青年 (楼主) 3年前
蜡笔小新 (作者) 3年前
犯二青年 (楼主) 3年前

file
刚刚新开了个 laravel-s 项目。确实 var_dump 不行,得用 laravel 的方法,比如封装好的 dump() @蜡笔小新
刚刚查看了 laravel-s 的文档,文档中有说,如图:

Laravel

3年前 评论
蜡笔小新 3年前
犯二青年 (作者) (楼主) 3年前
蜡笔小新 3年前
蜡笔小新 3年前

不太建议用于生产 除非你对swoole与laravel了解的很通透 否则 你上生产你会发现各种各样的坑。还是建议用swoole的几个专门的框架比较可靠些

2年前 评论

生产环境用了很久了

1年前 评论

可以用,就是第三方包估计要注意一点

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!