摘要:网络编程一直是的短板,尽管扩展弥补了这个缺陷,但是其编程风格偏向了或,与原本的同步编程风格迥然相异。目前的大部分主流应用框架依然是同步编程风格,所以一直在探索与同步编程结合的途径。正是连接同步编程和异步编程的一座桥梁,有兴趣可以关注一下。
网络编程一直是PHP的短板,尽管Swoole扩展弥补了这个缺陷,但是其编程风格偏向了NodeJS或GoLang,与原本的同步编程风格迥然相异。目前PHP的大部分主流应用框架依然是同步编程风格,所以一直在探索Swoole与同步编程结合的途径。LNMP的不足
lumen-swoole-http正是连接同步编程Lumen和异步编程Swoole的一座桥梁,有兴趣可以关注一下。
LNMP是经典的Web应用架构组合,虽然(Linux、NginX、MySQL和PHP-FPM)四者各种是优秀的系统或软件,但是组合到一起的总体性能并不尽人意,明显的不是1+1+1+1>4,而是4+3+2+1<1。Linux系统无可厚非,主要问题出现在:
从NginX到PHP-FPMNginX利用IO多路复用机制epoll,极大地减少了IO阻塞等待,可以轻松应对C10K。可是每次NginX将用户请求传递给PHP-FPM时,PHP-FPM总是需要从新加载PHP项目代码:创建执行环境,读取PHP文件和代码解析、编译等操作一次又一次的重复执行,造成不小的消耗。
从PHP-FPM到MySQL由于PHP代码本身是同步执行,PHP-FPM连接MySQL查询数据时,只能空闲等待MySQL返回查询结果。一个查询语句执行时间可能会需要几秒钟,期间PHP-FPM若是能暂时放下当前用户慢查询请求,而去处理其他用户请求,效率必然有所提高。
Swoole HTTP服务器Swoole HTTP服务器也采用了epoll机制,运行性能与NginX相比,虽不及,犹未远。不过Swoole HTTP服务器嵌入PHP中作为其一部分,可以直接运行PHP,完全可以取代NginX + PHP-FPM组合。
以目前流行的为框架Lumen(Laravel的子框架)为例,用Swoole HTTP服务器运行Lumen项目十分简单,只需要在$worker->onRequest($request, $response)(收到用户请求)时将$request传给Lumen处理,$response再将Lumen的处理结果返回给用户,而且$worker的整个生命周期里只会加载一次Lumen项目代码,没有多余的磁盘IO和PHP代码编译的开销。
压力测试在4GB+4Core的虚拟机下,测试HTTP服务器的静态输出:
2000客户端并发500000请求,不开启HTTP Keepalive,平均QPS:
NginX + HTML QPS:25883.44 NginX + PHP-FPM + Lumen QPS:828.36 Swoole + Lumen QPS:13647.75
2000客户端并发500000请求,开启HTTP Keepalive,平均QPS:
NginX + HTML QPS:86843.11 NginX + PHP-FPM + Lumen QPS:894.06 Swoole + Lumen QPS:18183.43
可以看出,Swoole + Lumen组合的执行效率远高于NginX + PHP-FPM + Lumen组合。
异步MySQL客户端以上都是铺垫,以下才是整篇文章的重点
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28332.html
摘要:负责解释执行文件生成响应,最终返回给,展现至前端。相比于传统架构,进程模型最大的特点在于其多线程模式处理网络请求,使得其能轻松应对大量连接。这要求开发人员对于多进程的运行模式有更清晰的认识更容易内存泄露。 一、SwooleSwoole号称重新定义了PHP,它是一个PHP扩展,使得PHP可以使用异步的方式执行,就像node一样,而且还能使用socket,为PHP提供了一系列异步IO、事件...
摘要:从入门到放弃二一异步毫秒定时器设置一个间隔时钟定时器,与定时器不同的是定时器会持续触发,直到调用清除。是一次性函数,执行完成后就会销毁最大不超过使用定时器来删除定时器。 swoole——从入门到放弃(二) 一、异步毫秒定时器 swoole_timer_tick:设置一个间隔时钟定时器,与after定时器不同的是tick定时器会持续触发,直到调用swoole_timer_clear清...
摘要:从入门到放弃二一异步毫秒定时器设置一个间隔时钟定时器,与定时器不同的是定时器会持续触发,直到调用清除。是一次性函数,执行完成后就会销毁最大不超过使用定时器来删除定时器。 swoole——从入门到放弃(二) 一、异步毫秒定时器 swoole_timer_tick:设置一个间隔时钟定时器,与after定时器不同的是tick定时器会持续触发,直到调用swoole_timer_clear清...
摘要:当某种网络事件发生时,会回调用户设置的指定回调函数。承担了底层网络事件的监听及各种底层事件处理,当收到请求时,会触发事件提醒,然后将控制权转交预先注册的事件回调函数,来进行后续的处理。请求到来时创建,请求结束后销毁。 运行流程图 showImg(https://segmentfault.com/img/remote/1460000017207791);showImg(https://s...
阅读 733·2023-04-25 17:33
阅读 3595·2021-07-29 14:49
阅读 2464·2019-08-30 15:53
阅读 3412·2019-08-29 16:27
阅读 1978·2019-08-29 16:11
阅读 994·2019-08-29 14:17
阅读 2407·2019-08-29 13:47
阅读 1993·2019-08-29 13:28