如何正确的压测swoole压测

【Swoole】用swoole简单实现MySQL连接池 - CSDN博客
【Swoole】用swoole简单实现MySQL连接池
MySQL连接池
在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再根据当前情况去调用其worker进程然后处理PHP,如果需要MySQL,在与MySQL建立连接,这个时候,如果有1000个请求打过来,就需要与MySQL建立1000个连接。如果请求达到万级或者百万级,这时数据库的压力就会非常大了。连接池技术就可以派上用场了,可以大大降低数据库连接数,还可以降低IO消耗。
为什么可以降低IO消耗?
MySQL短连接每次请求操作数据库都需要建立与MySQL服务器建立TCP连接,这是需要时间开销的。TCP连接需要3次网络通信。这样就增加了一定的延时和额外的IO消耗。请求结束后会关闭MySQL连接,还会发生3/4次网络通信。
而连接池采用的是MySQL的长连接模式,会一直保持与MySQL的连接,重用连接进行MySQL的操作,从而节省了建立连接和断开连接的消耗。
为什么可以降低数据连接数呢?
数据的连接池为维持若干个长连接,当新请求到达的时候,如果连接池空闲,就分配给连接池去处理,否则,后面的数据库连接请求将被加入到等待队列中。
用swoole实现一个简单的MySQL连接池
$serv = new swoole_server('0.0.0.0', 9509);
$serv-&set(array(
'worker_num' =& 50,
'task_worker_num' =& 10,
function my_onReceive($serv, $fd, $from_id, $data)
echo "收到数据".$data.PHP_EOL;
$result = $serv-&taskwait($data);
echo "任务结束".PHP_EOL;
if ($result !== false) {
list($status, $db_res) = explode(':', $result, 2);
if ($status == 'OK') {
$serv-&send($fd, var_export(unserialize($db_res), true) . "\n");
$serv-&send($fd, $db_res);
$serv-&send($fd, "Error. Task timeout\n");
function my_onTask($serv, $task_id, $from_id, $sql)
echo "开始做任务 task id:".$task_id.PHP_EOL;
static $link = null;
if ($link == null) {
$link = @mysqli_connect("127.0.0.1", "root", "passwd", "database");
if (!$link) {
$link = null;
$serv-&finish("ER:" . mysqli_error($link));
$result = $link-&query($sql);
if (!$result) {
if(in_array(mysqli_errno($link), [2013, 2006])){
$link = null;
goto HELL;
$serv-&finish("ER:" . mysqli_error($link));
if(preg_match("/^select/i", $sql)){
$data = $result-&fetch_assoc();
$data = $result;
$serv-&finish("OK:" . serialize($data));
function my_onFinish($serv, $task_id, $data)
echo "任务完成";
echo "AsyncTask Finish:Connect.PID=" . posix_getpid() . PHP_EOL;
$serv-&on('receive', 'my_onReceive');
$serv-&on('task', 'my_onTask');
$serv-&on('Finish', 'my_onFinish');
$serv-&start();
这里就不再说代码了,注释很清楚了,如果对swoole函数有什么疑问,请自行查看官方文档。
接下来,写了个客户端代码来做测试
$client = new swoole_client(SWOOLE_SOCK_TCP);
$client-&connect('*.*.*.*', 9509, 10) or die("连接失败");
while(true){
echo "请输出要执行的sql: ";
$sql = trim(fgets(STDIN));
if($sql=='exit'){
$client-&send($sql);
$data = $client-&recv();
var_dump($data);
$client-&close();
运行,首先启动server
[root@VM_114_93_centos swoole]
然后运行client
[root@VM_114_93_centos swoole]
请输出要执行的sql: select * from s_lvs_
string(103) "array (
'id' =& '3',
'protocol' =& 'tcp',
'lb_algo' =& 'ip_hash',
请输出要执行的sql: insert into s_lvs_vip set protocol='tcp',lb_algo='ip_hash';
string(5) "true
请输出要执行的sql: select * from s_lvs_
string(196) "array (
'id' =& '3',
'protocol' =& 'tcp',
'lb_algo' =& 'ip_hash',
'id' =& '4',
'protocol' =& 'tcp',
'lb_algo' =& 'ip_hash',
请输出要执行的sql: delete from s_lvs_vip where id=3;
string(5) "true
请输出要执行的sql: select * from s_lvs_
string(103) "array (
'id' =& '4',
'protocol' =& 'tcp',
'lb_algo' =& 'ip_hash',
请输出要执行的sql: exit
在看server端的输出结果:
[root@VM_114_93_centos swoole]# php DBserver_task.php
收到数据select * from s_lvs_
开始做任务 task id:0
收到数据insert into s_lvs_vip set protocol='tcp',lb_algo='ip_hash';
开始做任务 task id:1
收到数据select * from s_lvs_
开始做任务 task id:2
收到数据delete from s_lvs_vip where id=3;
开始做任务 task id:3
收到数据select * from s_lvs_
开始做任务 task id:4
同样执行一条查询
不用连接池的PHP代码
$conn = @mysqli_connect("***.***.***.***","root","",'hulk');
if($conn){
//mysqli_select_db($conn,"hulk");
$res=mysqli_query($conn,'select * from s_lvs_vip');
$row=mysqli_fetch_assoc($res);
var_dump($row);
echo "ERROR";
用连接池的PHP代码
$sql = 'select * from s_lvs_vip';
$client = new swoole_client(SWOOLE_SOCK_TCP);
$client-&connect('***.***.***.***', 9509, 10) or die("连接失败");
$client-&send($sql);
$data = $client-&recv();
var_dump($data);
$client-&close();
都用2000并发去测试多次,取平均值
ab -n 2000 -c 100 http://***.***.***.***/swoole/mysqli.php
ab -n 2000 -c 100 http://***.***.***.***/swoole/DBclient.php
未使用连接池
使用了连接池
34.563 seconds
25.407 seconds
Failed requests
每秒钟请求量
57.87 [#/sec] (mean)
78.72 [#/sec] (mean)
客户端平均请求等待时间
[ms] (mean)
[ms] (mean)
服务端平均请求响应时间
17.282 [ms]
12.704 [ms]
通过这些测试数据,可以看出用了连接池以后,效果还是很明显的,有一个质的改变。
注 : 博主用的是腾讯云 1核 1M 1G内存的云主机,测试数据仅供参考。
小知识补充
造成这样的原因一般是sql操作的时间过长,或者是传送的数据太大。
在mysql中有一个wait_timeout参数,默认设置为8个小时,当超过8个小时没有数据交互时,mysql服务器会主动关闭掉超时的连接,对应的mysql 错误码是2006,报错为MySQL server has gone away,当查询的结果集超过 max_allowed_packet 也会出现这样的报错
错误:2013 (CR_SERVER_LOST)
消息:查询过程中丢失了与MySQL服务器的连接。
关于以上两个错误码的详细介绍,参照 。
本文已收录于以下专栏:
相关文章推荐
基于Swoole2协程特性实现的MySQL连接池
使用Swoole2的\Swoole\Coroutine\MySQL创建连接,通过静态类和静态成员属性维护连接池,不同协程可以共享该连接池。
环境说明: 系统:Ubuntu14.04 (安装教程包括CentOS6.5)
PHP版本:PHP-5.5.10
swoole版本:1.7.7-stable
Github地址:https://...
swoole的官网请见:/一.服务器端:1. 编辑server.php文件内容如下:on('Open', function($server, $req
Server Software:
Server Hostname:
Server Port:
8888Document Path...
Sworm - 基于Swoole的异步MySQL数据库ORM框架
Sworm是一个基于Swoole的异步MySQL调用的ORM数据库框架。该框架封装了swoole_mysql,API与Not...
系统更新:
sudo apt-get update
注:ubuntu源仿佛很多时候连接不成功,建议先将源改为阿里云,方法如下(使用阿里云服务器请忽略):
   1、cd /etc/apt       ...
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)& Yii/Yaf/Swoole3个框架的压测性能对比
Yii/Yaf/Swoole3个框架的压测性能对比
本次压测使用的是一台4核I5 CPU,8G内存的笔记本。使用的版本是:
swoole_framework github最新版
Yii-1.1.14
php-fpm和swoole应用服务器均启用了8个进程,因为仅比较hello world,不存在阻塞,8进程足以压满CPU。php5-fpm中已经启用了apc对所有PHP进行缓存。
压测使用ab工具,参数为:
ab -c 100 -n 10000
Server Software: nginx/1.2.6
Server Hostname: localhost
Server Port: 80
Document Path: /yafapp/
Document Length: 11 bytes
Concurrency Level: 100
Time taken for tests: 1.336 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 1770000 bytes
HTML transferred: 110000 bytes
Requests per second: 7486.03 [#/sec] (mean)
Time per request: 13.358 [ms] (mean)
Time per request: 0.134 [ms] (mean, across all concurrent requests)
Transfer rate: 1293.97 [Kbytes/sec] received
Server Software: nginx/1.2.6
Server Hostname: localhost
Server Port: 80
Document Path: /yiiapp/
Document Length: 11 bytes
Concurrency Level: 100
Time taken for tests: 8.016 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 1770000 bytes
HTML transferred: 110000 bytes
Requests per second: 1247.55 [#/sec] (mean)
SwooleFramework
Server Software: Swoole
Server Hostname: 127.0.0.1
Server Port: 8888
Document Path: /hello/index
Document Length: 11 bytes
Concurrency Level: 100
Time taken for tests: 1.470 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2750000 bytes
HTML transferred: 110000 bytes
Requests per second: 6801.78 [#/sec] (mean)
Time per request: 14.702 [ms] (mean)
Time per request: 0.147 [ms] (mean, across all concurrent requests)
Transfer rate: 1826.65 [Kbytes/sec] receive
有些人说框架的消耗和业务逻辑相比不算什么,这句话在你的QPS不到10个时是完全正确的。但如果你的网站访问量很大,机器负载很高,那么框架的性能消耗就会很明显的体现出来了。
Yii压测只有1200QPS,假设网站的平均QPS为200,因为框架的消耗是纯CPU消耗,也就是光Yii就会带来(200/%=16.7%的CPU消耗。而Yaf/Swoole的QPS可达qps仅占用
(200/%=2.8%的CPU消耗。当然200QPS对于一个巨型网站来说只是一个小数目,框架的CPU消耗会随着QPS增加而直线上升。
Swoole框架的早期版本可达9000QPS,swoole框架本身还是很复杂的,因为全部是PHP的代码实现,仅底层使用了swoole扩展,如果做了足够的精简和优化,还是有很大的上升空间。
压测证明Yaf的性能非常好。如果你希望使用PHP应用服务器可以选择Swoole,如果是LAMP/LNMP架构可以使用Yaf框架。Swoole问答
使用swoole_framework
ab -c 100 -n 10000 xxx
一直出现下面的错误日志
[ 13:47:18]
swReactorThread_send: Connection[fd=72] is not exists.
[ 13:47:18]
swReactorThread_send: Connection[fd=107] is not exists.
[ 13:47:18]
swReactorThread_send: Connection[fd=86] is not exists.
[ 13:47:18]
swReactorThread_send: Connection[fd=88] is not exists.
[ 13:47:18]
swReactorThread_send: Connection[fd=92] is not exists.
[ 13:47:18]
swReactorThread_send: Connection[fd=79] is not exists.
[ 13:47:18]
swReactorThread_send: Connection[fd=78] is not exists.
[ 13:47:18]
swReactorThread_send: Connection[fd=80] is not exists.
[ 13:47:18]
swReactorThread_send: Connection[fd=103] is not exists.
[ 13:49:38]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
[ 13:49:39]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
[ 13:49:39]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
[ 13:49:41]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
[ 13:49:43]
swFactoryProcess_end: The connection[48] is closeing.
[ 13:49:43]
swFactoryProcess_end: The connection[48] is closeing.
[ 13:49:43]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
[ 13:49:46]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
[ 13:49:47]
swFactoryProcess_end: The connection[48] is closeing.
[ 13:49:47]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
[ 13:49:53]
swFactoryProcess_end: The connection[48] is closeing.
[ 13:49:55]
swFactoryProcess_end: The connection[48] is closeing.
[ 13:49:59]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
[ 13:49:59]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
[ 13:50:07]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
[ 13:50:20]
swReactorThread_onReceive_no_buffer: recv from connection[fd=48] failed. Error: Bad file descriptor[9]
- 关注外星人
使用长连接测试一下。启用keepalive,ab增加-k参数。
- 关注外星人
not exists 这个可以忽略的。
要回复问题请先或swoole性能如何
根据swoole官网和自己的测试来看,裸swoole和裸php-fpm+nginx的ab基准测试来看,swoole是php-fpm的2~4倍。
本文ab测试语句
ab -c 200 -n 100000 /
#替换为测试的服务
生产应用有所不同
但是,实际情况并不是那么乐观,就一个安全和易维护的web程序来说,一个完备的路由组件是不可缺少的,这里我们选用了phalcon框架。swoole_http_server+phalcon基准测试和nginx+php-fpm+phalcon的将近持平,并没有太大优势。(这里只使用了phalcon的路由、应用、volt模板服务,没有进行任何数据库操作),这个结果让我很惊讶(是我姿势不对?如果是,请指教)。而swoole官方表示对http协议的支持还不是很完善,建议使用nginx进行反向代理,这进一步拉低了swoole的测试结果,结果只有nginx+php-fpm+phalcon的6成左右。下面给出大概的结果,详细结果会在文章后面贴出。因为测试程序并不复杂,启用opcache的效果并不明显,不再贴出启用opcache的结果。
Requests per second:&&& 8182.15 [#/sec]
swoole_http_server
Requests per second:&&& 41849.30 [#/sec]
nginx+phalcon
Requests per second:&&& 7219.17 [#/sec]
swoole+phalcon
Requests per second:&&& 7825.38 [#/sec]
swoole+yaf
Requests per second:&&& 19321.51 [#/sec]
nginx+swoole+phalcon
Requests per second:&&& 4329.06 [#/sec]
nginx+swoole+yaf
Requests per second:&&& 6952.89 [#/sec]
对测试结果的分析
在没有进行优化之前,swoole_http_server的实际应用并发性能并没有什么优势。而相比phalcon来说,yaf+swoole的组合可以获得更佳的性能(看phalcon的路由组件源码,可是料到这个结果)。而在用nginx反向代理swoole应用,性能会进一步下降,被nginx+php-fpm+phalcon/yaf甩出几条街。
但是swoole依然有着数据库连接池、异步任务、异步网络客户端等不可跨越的优势和便利。而在实际应用中,另一个真正影响性能的大户,是数据库操作。swoole的连接池在方面有巨大优势(nginx+php-fpm可以使用奇虎360的数据库中间件实现)。所以,决定,优化nginx配置,再看看结果。
针对swoole优化nginx反向代理设置
原理其实很简单,对nginx反向代理进行缓存,提升性能。再次要说的是,swoole官网给出的swoole nginx反向代理配置,跑不起来(首页无法反向代理)。。本文读者请根据本文进行配置。
首先需要编辑nginx配置文件
编辑/usr/local/nginx/conf/nginx.conf添加或修改以下内容:
proxy_temp_path /data/ngx_cache 1 2;
#keys_zone=cache1:100m 表示这个zone名称为cache1,分配的内存大小为100MB
#/data/ngx_cache/cache1 表示cache1这个zone的文件要存放的目录
#levels=1:2 表示缓存目录的第一级目录是1个字符,第二级目录是2个字符,即/data/ngx_cache/cache1/a/1b这种形式
#inactive=1d 表示这个zone中的缓存文件如果在1天内都没有被访问,那么文件会被cache manager进程删除掉
#max_size=10g 表示这个zone的硬盘容量为10GB
proxy_cache_path /data/ngx_cache/cache1 levels=1:2 keys_zone=cache1:100m inactive=1d max_size=10g;
编辑nginx反向代理swoole配置文件
以lnmp一建安装包php运行环境为例。正常添加网站,伪静态规则设置为swoole.conf。然后编辑/usr/local/nginx/config/swoole.conf内容如下:
location / {
if (-f $request_filename/index.html){
proxy_pass http://127.0.0.1:9501;
if (-f $request_filename/index.php){
proxy_pass http://127.0.0.1:9501;
if (!-f $request_filename){
proxy_pass http://127.0.0.1:9501;
#替换成自己设置的swoole监听地址和端口
proxy_next_upstream http_502 http_504 error timeout invalid_
#讲这些错误类型返回nginx处理
proxy_set_header Host $
proxy_set_header X-Forwarded-For $remote_
proxy_set_header X-Real-IP $remote_
#设置资源缓存的zone
proxy_cache cache1;
#设置缓存的key
proxy_cache_key $host$uri$is_args$
#设置状态码为200和304的响应可以进行缓存,并且缓存时间为30分钟
proxy_cache_valid 200 304 30m;
expires 1d;
#$upstream_cache_status表示资源缓存的状态,有HIT MISS EXPIRED三种状态
add_header X-Cache $upstream_cache_
#或者不开启缓存
location / {
   proxy_next_upstream http_502 http_504 error timeout invalid_
#讲这些错误类型返回nginx处理
proxy_set_header Host $
proxy_set_header X-Forwarded-For $remote_
proxy_set_header X-Real-IP $remote_
if (-f $request_filename/index.html){
proxy_pass http://127.0.0.1:9501;
if (-f $request_filename/index.php){
proxy_pass http://127.0.0.1:9501;
if (!-f $request_filename){
proxy_pass http://127.0.0.1:9501;
优化后的结果
优化后结果
优化前结果
nginx+swoole+phalcon
Requests per second:&&& 12119.43 [#/sec]
4329.06 [#/sec]
nginx+swoole+yaf
Requests per second:&&& 12075.86 [#/sec]
6952.89 [#/sec]
ab测试结果有很大的提升,相比裸swoole+phalcon有很大提升,而且swoole+phalcon+nginx的测试结果超过了swoole+yaf+nginx,这种情况下,phalcon功能更强大,当然选择swoole+phalcon+nginx的组合了。
下面贴出详细ab测试结果
swoole_http_server
ab -c 200 -n 100000 -k http://127.0.0.1:9501/
.......................
Server Software:
swoole-http-server
Server Hostname:
Server Port:
Document Path:
Document Length:
Concurrency Level:
Time taken for tests:
2.390 seconds
Complete requests:
Failed requests:
Keep-Alive requests:
Total transferred:
HTML transferred:
2800000 bytes
Requests per second:
41849.30 [#/sec] (mean)
Time per request:
4.779 [ms] (mean)
Time per request:
0.024 [ms] (mean, across all concurrent requests)
Transfer rate:
7397.19 [Kbytes/sec] received
Connection Times (ms)
mean[+/-sd] median
Processing:
.....................
swoole+phalcon
ab -c 200 -n 100000 -k http://127.0.0.1:9501/
............................
Server Software:
swoole-http-server
Server Hostname:
Server Port:
Document Path:
Document Length:
Concurrency Level:
Time taken for tests:
12.779 seconds
Complete requests:
Failed requests:
Keep-Alive requests:
Total transferred:
HTML transferred:
2300000 bytes
Requests per second:
7825.38 [#/sec] (mean)
Time per request:
25.558 [ms] (mean)
Time per request:
0.128 [ms] (mean, across all concurrent requests)
Transfer rate:
1344.99 [Kbytes/sec] received
Connection Times (ms)
mean[+/-sd] median
Processing:
................
swoole+yaf
ab -c 200 -n 100000 -k http://127.0.0.1:9501/
....................
Server Software:
swoole-http-server
Server Hostname:
Server Port:
Document Path:
Document Length:
Concurrency Level:
Time taken for tests:
5.176 seconds
Complete requests:
Failed requests:
Keep-Alive requests:
Total transferred:
HTML transferred:
Requests per second:
19321.51 [#/sec] (mean)
Time per request:
10.351 [ms] (mean)
Time per request:
0.052 [ms] (mean, across all concurrent requests)
Transfer rate:
9358.85 [Kbytes/sec] received
Connection Times (ms)
mean[+/-sd] median
Processing:
...................
nginx+swoole+phalcon未优化前结果
ab -c 200 -n 100000 /
....................
Server Software:
Server Hostname:
Server Port:
Document Path:
Document Length:
Concurrency Level:
Time taken for tests:
23.100 seconds
Complete requests:
Failed requests:
Total transferred:
HTML transferred:
2300000 bytes
Requests per second:
4329.06 [#/sec] (mean)
Time per request:
46.199 [ms] (mean)
Time per request:
0.231 [ms] (mean, across all concurrent requests)
Transfer rate:
667.96 [Kbytes/sec] received
Connection Times (ms)
mean[+/-sd] median
Processing:
.................
nginx+swoole+yaf未优化前
ab -c 200 -n 100000 /
Server Software:
Server Hostname:
Server Port:
Document Path:
Document Length:
Concurrency Level:
Time taken for tests:
14.383 seconds
Complete requests:
Failed requests:
Total transferred:
HTML transferred:
Requests per second:
6952.89 [#/sec] (mean)
Time per request:
28.765 [ms] (mean)
Time per request:
0.144 [ms] (mean, across all concurrent requests)
Transfer rate:
3245.59 [Kbytes/sec] received
Connection Times (ms)
mean[+/-sd] median
Processing:
nginx+swoole+phalcon配置优化后
ab -c 200 -n 100000 /
...........
Server Software:
Server Hostname:
Server Port:
Document Path:
Document Length:
Concurrency Level:
Time taken for tests:
8.251 seconds
Complete requests:
Failed requests:
Total transferred:
HTML transferred:
2300000 bytes
Requests per second:
12119.43 [#/sec] (mean)
Time per request:
16.502 [ms] (mean)
Time per request:
0.083 [ms] (mean, across all concurrent requests)
Transfer rate:
2864.17 [Kbytes/sec] received
Connection Times (ms)
mean[+/-sd] median
Processing:
.............
nginx+swoole+yaf配置优化后
ab -c 200 -n 100000 /
................
Server Software:
Server Hostname:
Server Port:
Document Path:
Document Length:
Concurrency Level:
Time taken for tests:
8.281 seconds
Complete requests:
Failed requests:
Total transferred:
HTML transferred:
2300000 bytes
Requests per second:
12075.86 [#/sec] (mean)
Time per request:
16.562 [ms] (mean)
Time per request:
0.083 [ms] (mean, across all concurrent requests)
Transfer rate:
2853.86 [Kbytes/sec] received
Connection Times (ms)
mean[+/-sd] median
Processing:
............
Hi 欢迎来到IT大叔
大叔关注IT技术文档和发展革新,加入我们,这里有一群共同爱好的人!
其实不是被禁,现在放动画需要买版权了,没买的就没有,多去几个网站找就有。直接百度也行。哔哩哔哩现在是可以观看的。
前段时间看了微信公众号:中二执事分享的文章《动漫里哪些绝望的爱和赴死》,就觉得未闻花名没有出现在文中实在是不合理,当初面码死去可是流了不少眼泪,不知道有没有和我一样的中二友友
用Laravel自带的users表举例,表结构为:CREATE TABLE `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL
路由配置文件为app/Admin/routes.php:
Encore\Admin\Grid类用于生成基于数据模型的表格,先来个例子,数据库中有movies表CREATE TABLE `movies` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`title` varchar(255) COLLATE
Encore\Admin\Widgets\Collapse类用来生成折叠插件:use Encore\Admin\Widgets\C$collapse = new Collapse();$collapse->add('Bar', 'xxxxx');
$collapse->add('
laravel-admin已经内置了RBAC权限控制模块,展开左侧边栏的Auth,下面有用户、权限、角色三项的管理面板,权限控制的使用如下:use Encore\Admin\Auth\Pclass PostController extends Controller
大小:248M
最近更新:0
大小:275KB
最近更新:0
大小:1.5M
最近更新:0
最近更新:0}

我要回帖

更多关于 swoole http 压测 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信