PHP 与 Swoole 浅析与学习
php
我们用的PHP主要用于web开发,通过nginx、apache等服务端程序调用php-fpm处理服务端的业务逻辑,处理完后php撤消内存并后回结果,由此可见,一个http就要加载一次php的全部文件,这也是目前php-fpm的缺点之一,并且php-fpm不合适service端的开发。
下面是我随便在网上找的php-fpm运行流程,各位参考理解一下
http://www.test.cc
|
Nginx
|
路由到http://www.test.cc/index.php
|
加载nginx的fast-cgi模块
|
fast-cgi监听127.0.0.1:9000地址
|
www.test.com/index.php请求到达127.0.0.1:9000
|
php-fpm 监听127.0.0.1:9000
|
php-fpm 接收到请求,启用worker进程处理请求
|
php-fpm 处理完请求并撤消内存,返回给nginx
|
nginx将结果通过http返回给浏览器
总结一下我理解php-fpm的优缺点
优点:
- 部署简单
- 调试方便
- 基于传统php的项目非常多,易于参考
缺点:
- 每次http请求都要加载全部的项目文件
- php-fpm性能不佳,并发性能不好
- 核心异步网络不支持
swoole
这个swoole官方的介绍
SWOOLE是PHP的协程高性能网络通信引擎,使用C/C++
语言编写,提供了多种通信协议的网络服务器和客户端模块
,使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升。^ [1]^
swoole相对于php-fpm优点:
- 能搭建TCP/UDP/UnixSocket服务器
- 原生支持毫秒定时器
- 异步/同步TCP/UDP网络客户端、异步MySQL、异步Redis
- 高性能的协程提高异步IO的效果和性能
- 常驻的cli运行模式,不用每次请求加载一次项目代码
swoole相对于php-fpm缺点:
- 不支持xdebug,不支持手动dump
- 相关文档较少
- 入门难度高,多数PHPER不了解TCP/IP网络协议、多进程/多线程、异步io等
详细的swoole介绍可以到easyswoole文档中查看easyswoole文档
怎么学习swoole
- 先通略看一看swoole的官方文档
- 看一下并实现慕课网singwa老师的两个swoole教程
- esayswoole的官方入门视频easyswoole入门视频
- 看一下开源swoole项目,研究别人怎么用swoole实现业务逻辑 https://www.fashop.cn/ | 博客:woann-chat 基于 laravelS 和 layim 的聊天系统
- 到这里,你应该就能算会用swoole的phper了
本人实际项目
Laravel 项目深度优化过程
jin-chat 基于 EasySwoole 和 layim 的聊天系统
本作品采用《CC 协议》,转载必须注明作者和本文链接
"php-fpm 监听127.0.0.1:80"这里就写错了,监听9000或者其他端口,不然跟nginx的监听的80端口冲突了
@三石寰宇 感谢指正
开发两年开始使用 swoole 扩展确实不错啊
能不能说下你的感受。我现在一个视频还没看完
@悲剧不上演 那方面的感受
swoole 对平时业务开发的影响
@悲剧不上演 开发其实没什么区别,前提你要知道一些限制,比如不能用die、有些变量不会撤消,避免这样就行了,还有就是部署难度高一点
www.example.com 不应该是www.test.cc吗? :joy:
@我真叫阳阳 复制过来的时候少改了一点,多谢提醒
@Double-Jin 兄弟真不是我杠,流程图中三个路由还是不一样哈;跟我一样;我经常在开发中少个分号错个字母啥的,没少挨领导批;
@我真叫阳阳 开发中少了分号IDEA会报错的啦
fast-cgi是协议没有监听作用,php-fpm是实现这个协议的程序