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、鸣谢

犯二青年

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 6

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

1周前 评论
犯二青年 (楼主) 1周前
hxd

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

1周前 评论
犯二青年 (楼主) 1周前
hxd (作者) 1周前
犯二青年 (楼主) 1周前
QiFengLe_ 1周前
hxd (作者) 1周前

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

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

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

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

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);
}

}

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

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

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

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

1周前 评论
犯二青年 (楼主) 1周前
heNry_o3o (作者) 1周前
犯二青年 (楼主) 1周前
heNry_o3o (作者) 1周前
犯二青年 (楼主) 1周前
DonSen 4天前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!