无意间发现的这个神器webman,真是秋名山上的腾源拓海!

该框架是workerman下的一个web开发的生态,我们可以先看看这里workerman的官方网站

workerman早有耳闻,知道它蛮厉害的,跟swoole也不相上下,这次主要是说webman,可以看这里

话不多说,赶紧上手。

1. 安装

这个安装真的很简单,就一句话  composer create-project workerman/webman 就是它要求你的PHP版本和composer版本

很好,我们直接就跑起来

2. 修改服务端口配置

然后就进去  cd webman ,vscode打开这个文件夹, code .

找到  config/server.php  改一下默认的IP:端口。这里我就把原来的  0.0.0.0  改为了 127.0.0.1  端口继续用  8787

然后就在命令行上面执行  php start.php start 把服务运行起来

好了,服务已经起来了。现在实际上就是 php在监听  127.0.0.1  的  8787  端口

3. 分析入口代码

我们看一下代码

显然这里的controller是app下面的这个默认的  IndexController.php  文件控制器,好,我们打开这个文件可以看到默认方法

就是说首页实际上是读取了 README.md 文件来的,这样,我们去访问一下首页的 http://127.0.0.1:8787/ 看一下结果,我们得到了这个

好的,然后我们尝试着直接改一下这个文件看看。

我们改为这个样子看看

然后再刷新首页

我们可以看到,这里结果直接就变化了,这说明我们的代码是立即生效的。这个和swoole还是稍微有点不同的,那个要重新启动一下服务(不过我记得应该也有插件还是什么来着能够让代码立即更新的,但是要另外设置一下)

这里我们可以将这个更新称为热更新,就是服务还在运行,但是服务提供的代码变了。

4. 分析静态变量作缓存

这里我注意到有个 static 关键字,感觉这个东西不得了啊,我就大胆的按照我预想的去尝试了一下。

我将if判断里面加一个小小的调试。

好了代码改好了,我们Ctrl+C把服务停掉,再执行一下把服务开起来  。

就像上图我的操作一样,我第一次点击刷新进行访问,命令行输出了这句话 Will you only see me once time?

但是我后面的刷新访问,再也没有这样的话输出了,这说明了什么?

这说明这个变量是在命令行里面的静态变量,就意味着,他只会在if里面赋值一次,那也就是说,如果某些数据是从库里面拿到的而且不经常变化,我们完全可以拿这个静态变量进行存储,当作内存缓存在用,它比 file_get_contents 这样的文件缓存还快。

因为在以往php以 fastcgi或者FPM模式运行的场景下,请求与请求之间是独立的,总是有服务器进行转发或者解析的,那么这个时候两个请求之间是不能共用变量的,除非是那种 $_SERVER $_SESSION 等变量,但是这种东西显然不合适用来存储缓存数据的。所以我们一般会用 file 文件缓存serialize或者json_encode好数据,然后读取的时候读文件再反序列化来给后面的请求用,又或者我们觉得文件读写太慢更高级的 memcache redis缓存,但是即便是用这种内存服务器缓存,它也有开销需要连接内存服务器,更激进一些我们用本地的Apc Yac缓存,可是这种东西我之前测试发现它有一个容量上面的限制,不是很方便给这种很大变量的缓存用。而这个时候我们能看到这个webman直接将静态变量就能复用给不同的请求,实在是太快太方便了,等于后面的请求在index方法里面就走了两行代码就直接return了,真的牛!

先别高兴太早,仔细思考了一下,我觉得这样也是有点风险的,如果开发人员塞进来一个大数组或大的变量,或者说开始写代码的时候数据量少,从数据库读出来就这样赋值了,后来随着数据量的猛增,这个内容越来越大,这样命令行这里占用的内存也将越来越大,我猜测这里的变量是不释放的,直接是给下一个请求在用,我不知道这个框架它有没有那种自动回收变量内存的机制,如果没有,那这里还真可能是个安全隐患。

所以,这对于我们开发而言,就必须要更谨慎小心的使用这个功能,虽然它真的很快很好用。

好了关于这里的静态变量缓存我们先探讨到这里,然后我们看看另外两个方法。

5. 首页另外两个方法

这里看看另外两个方法,一个是 view , 一个是 json

view的就很简单,代码如下

就是渲染了模板,然后赋值name变量,简单猜测一下 肯定是在什么 view 文件夹里面的 index 文件夹 里面的 view.html 之类的

然后去看了看果然

好了,这里很简单,就是把 name 变量输出来,看看访问效果

咦?怎么会这样,这里不通?又想了想,哦,原来是 1234678,年轻人不讲5的(武德) 啊!

重新按照这个访问  http://127.0.0.1:8787/index/view

好了,有了。

然后再看看另外一个 json 的,代码如下:

吸取教训,这样访问  http://127.0.0.1:8787/index/json

得到了序列化json,可能你会奇怪为什么你的浏览器访问的效果不是这样的,你可能得到的是这样的

哈哈,那是因为我给我的chrome浏览器安装了一个插件,叫  JSON-handle

你可以在 chrome 的插件市场里面搜索JSON找到它

当然了,很有可能你都打不开这个网站。(你看看这站点域名就知道了)

6. 请求压力测试

好了,现在该给它上点强度了。我下载了一个软件叫 ddosify 。你可以这样安装它  sudo apt install ddosify

然后在命令行里面 对刚刚的这个站点来测试一下。

先执行这个,给它来个 5000 个请求

ddosify -t http://127.0.0.1:8787/index/json -d 1 -n 5000

用 ddosify 给这个URL   http://127.0.0.1:8787/index/json 进行请求(-t参数设置),持续1秒(-d参数设置),发起请求 5000次(-n参数设置)

看样子感觉良好嘛,平均时间是 0.00187s 也就是 1.87 毫秒,不过毕竟这代码啥也没干就返回了json。

再加大强度!上2万个请求!

好家伙,真是人才啊!这都顶住了,成功率百分百,而且花费时间反而短了,只用了 0.36 毫秒,都不知道说啥好了。

再加大力度! 上5万个请求!

总算出现失败了吧。看样子还是慢厉害的,都顶住了这么多请求,这在原来nginx或者apache的那种场景下,不知道会怎么样。

没有数据是没法说话的,我们试试看。现将代码修改成一样。

先看看apache2 启动!  sudo systemctl start apache2 再次测试

果然5000就顶不住了

后续我又测试了一下,2000也没顶住啊,不过也有可能是我的apache2没有调优导致的。

好,再看看 nginx。

好样的 nginx! 顶住了第一波 5000 个请求

再上点强度!2万个请求试试看。

再加大强度!5万个请求试试看。

看来大家都是在5万个请求这里顶不住了。好的,你们已经尽力了,辛苦同志们了!

从单纯的返回json数据的请求测试结果来看,这个框架还是厉害的,也能和nginx有一定程度上的媲美,我也感觉到了webman真是秋名山上的AE86啊!

感觉有了这个框架,就像给拓海的AE86换上了4A-GEU发动机,让他不再受制于马力的大小限制,真正狂飙起来!

拯救php性能的神器webman-初入门的更多相关文章

  1. 阿里巴巴开源性能监控神器Arthas初体验

    如果问性能测试中最难的是哪部分,相信很多人会说“性能调优”.确实是这样,性能调优是一个非常复杂.技术含量很高的工作.涉及到的知识面很广.以我多年从业经验来看,在企业里,大多数的性能调优都是由开发架构师 ...

  2. 【性能提升神器】STRAIGHT_JOIN

    今天给大家下另一个性能提升神器-STRAIGHT_JOIN,在数据量大的联表查询中灵活运用的话,能大大缩短查询时间. 首先来解释下STRAIGHT_JOIN到底是用做什么的: STRAIGHT_JOI ...

  3. MySQL性能优化神器Explain

    本文涉及:MySQL性能优化神器Explain的使用 简介 虽然使用Explain不能够马上调优我们的SQL,它也不能给予我们一些调整建议,但是它能够让我们了解MySQL 优化器是如何执行SQL 语句 ...

  4. Java性能分析神器--VisualVM Launcher[1]

    Java性能分析神器1--VisualVM Launcher VisualVM 当你日复一日敲代码的时候,当你把各种各样的框架集成到一起的时候,看着大功告成成功运行的日志,有没有那么一丝丝迷茫和惆怅: ...

  5. 阿里巴巴开源性能监控神器Arthas jvm

    原文:https://www.cnblogs.com/testfan2019/p/11038791.html 如果问性能测试中最难的是哪部分,相信很多人会说“性能调优”.确实是这样,性能调优是一个非常 ...

  6. SpringBoot 初入门

    SpringBoot 初入门 关于介绍什么之类的就不讲了,主要做一下学习记录. 1. 启动方式 IDEA 启动 命令行启动: mvn spring-boot:run 部署到服务器启动: 先进行打包, ...

  7. 性能分析神器VisualVM【转】

    性能分析神器VisualVM[转] Posted on 2015-04-17 09:37 WadeXu 阅读(5809) 评论(6) 编辑 收藏 VisualVM 是一款免费的,集成了多个 JDK 命 ...

  8. 任务队列神器:Celery 入门到进阶指南

    任务队列神器:Celery 入门到进阶指南 发布于2021-03-24 16:24:53阅读 1.9K0   1.什么是celery celery是一个简单,灵活.可靠的分布式任务执行框架,可以支持大 ...

  9. 【性能提升神器】Covering Indexes

    可能有小伙伴会问,Covering Indexes到底是什么神器呢?它又是如何来提升性能的呢?接下来我会用最通俗易懂的语言来进行介绍,毕竟不是每个程序猿都要像DBA那样深刻理解数据库,知道如何用以及如 ...

  10. Java性能分析神器-JProfiler详解(一)(转)

    前段时间在给公司项目做性能分析,从简单的分析Log(GC log, postgrep log, hibernate statitistic),到通过AOP搜集软件运行数据,再到PET测试,感觉时间花了 ...

随机推荐

  1. 网站接入qq登录

    网站接入qq登录可以省去注册账号,增加网站的体验度.那么要实现我自己搭建的站点天天博客的qq单点登录需要以下几个步骤:1,申请appid和appkey 首先要去https://connect.qq.c ...

  2. 远程连接 Ubuntu Desktop 桌面

    在 Ubuntu 的 设置 > 系统 > 远程桌面 上打开 桌面共享 和 远程控制 选项. sudo apt install gnome-remote-desktop 未完待续 参考: S ...

  3. MacTeX 使用

    MacTeX 是一个 TeX Live 的 macOS 定制版本.它包括: TeX Live GUI 应用程序 Ghostscript 关于 MacTeX 的介绍可以查看 MacTex 主页 安装 b ...

  4. JS 希尔排序完全理解

    希尔排序的思想直白点来说就是间隔对比,比如说 我有一个数组,长度为9,则第一次分割间隔为长度的1/3 + 1,则第一次对比就是1 比 4,2 比 5, 3 比 6,4 比 7,5 比 8 , 6 比 ...

  5. 人脸伪造图像检测:Deepfake魔高一尺,TextIn道高一丈

      只因开了一个视频会议,直接被骗1.8个亿 今年2月,一家跨国公司的香港分公司财务人员被一场精心策划的Deepfake视频会议诈骗,导致公司损失2亿港币(约1.8亿人民币). 事件起因是财务人员收到 ...

  6. Azure – DNS

    前言 以往 DNS 都是用 Domain 公司免费提供的. 但这类 DNS 一般都不支持 API 访问. 这就会导致无法自动 renew Let's Encrypt wildcard SSL. 所以用 ...

  7. SpringMVC —— REST风格简介

    REST风格简介 REST(Representational State Transfer),表现形式转换 传统风格资源描述形式 REST风格描述形式 优点 隐藏资源的访问行为,无法通过地址得知对资源 ...

  8. Servlet——idea创建Servlet模板

    idea创建Servlet模板   以前新建一个Servlet是通过新建一个Class文件   可以直接新建一个idea内的Servlet模板                    可以通过设置 更改 ...

  9. Dart 2.14 版现已发布

    支持 Apple Silicon,增加了默认的 lint.更好的工具和新的语言功能提高生产力. 本月,我们发布了 Dart SDK 2.14 的正式版,新的版本旨在通过独特的可移植性.生产力和稳健性组 ...

  10. 暑假集训CSP提高模拟18

    \[暑假集训CSP提高模拟 \ 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1 \] Very good problem, this make my news rotate. ...