Swoole
Swoole 是实现各种协定及实现异步高性能的一个库,不是框架。包含下层的编程 API 和底层的 hack,协程只不过是实现异步的一种形式。
基于 Swoole,PHP 开发者能够轻松疾速开发出反对高并发的利用,比方即时通讯类利用,甚至游戏服务器,进一步拓宽了 PHP 的利用场景。
越来越多的 PHP 我的项目曾经享受到 Swoole 带来的技术红利。
基于异步协程库 Swoole 的 PHP 框架越来越多了。
【教你 Swoole 入门到饿死】
目前基于 Swoole 的都有哪些框架:
- Hyperf: PHP 企业级微服务协程框架(官网团队单干,但文档不够清晰,语法偏差 Laravel)
- EasySwoole: 老牌框架(曾经挺久没更新,语法比拟凌乱)
- Swoft: 老牌框架(已进行保护)
- MixPHP: 老牌框架(已进行保护)
- SW-X:PHP 企业级微服务协程框架(民间团队保护,大量独立组件反对,语法偏差 ThinkPHP5)
swoole+php 与 go 的比拟
- CSP 模型:swoole 与 go 只差一个 select,go 还有多线程协程 runtime.GOMAXPROCS,当然单线程又有单线程的益处,少思考很多线程平安问题。
- 形象能力:php5 之后 与 java 比拟靠近,面向对象能力更好,设计模式更好使用,业务实现用 php 会更好,如果是做中间件应用 go 更好一些。
- 错误处理:php 的 try/catch/finally 尽管内置有余,且传统但能够少写不少解决异样的代码,异样不容导致服务进行,go 则在错误处理的粒度更精密一些,须要要更加仔细解决每个异样谬误,否则一不小心服务就挂了,php 的确适宜疾速实现业务。
- 组件库生态:php 现有的库分 c 扩大和 composer 包,其中 composer 包中有一些应用了一些全局变量 / 办法,导致无奈在协程中应用,而很多老的 c 扩大都没有思考到异步的场景,导致很多细粒度的性能实现不了,还有应用独自网络库无奈 hook 为协程的,而 go 所有的库都人造的能够用协程,并且是用自身 go 编写的,没有用到 c,也便于调试批改源码。显然在生态方面 java 和 go 是很占优的。
- 类型零碎:强弱类型自有各自的劣势,强类型执行效率必定高,弱类型比拟自在灵便。
- 性能:swoole 次要提供了 websocket/ 长链接的服务、协程异步实现,而协程异步次要是异步 IO,解决以往 php 只能同步 IO 带来的低效,但对于密集运算的话,swoole 解决不了 cpu 这块效率问题。swoole 通过协程把原 php 磁盘 IO、网络 IO 的同步阻塞形式降级为异步不阻塞的形式,进步 CPU 利用率,放慢申请解决。
咱们须要基于 swoole 的框架吗?还是可用在第三方框架上退出 swoole 扩大,比方 laravel 或 thinkphp 的 swoole 扩大?
我的项目不大,用户量不大,那自身就不会遇到性能瓶颈问题,那还是用本人相熟的传统的 mvc 框架即可,效率高,容错率好,易保护。
我的项目大,用户量大,并发大,公司只有 php 技术栈,那就先思考前端优化(代码逻辑优化、加载优化、资源优化等)、负载平衡、后端优化(业务逻辑或算法优化、流量限流、异步队列等)、数据层优化(适当缓存机制、数据库读写拆散、sql 语句优化、数据库索引优化等)等等
为了进一步优化,及可能还会思考更残缺的分布式,数据库主从与集群、缓存主从与集群、音讯队列集群,再思考服务剥离,缓缓倒退成为微服务架构,一方面进步性能,还进步开发测试部署效率。
而微服务罕用的 RPC、API(RESTful)技术,如果要求进步新能,显然客户端(后端业务客户端)须要反对异步实现,RPC 服务端也须要反对异步,能力保障连贯疾速解决并完结,防止零碎连贯太多最初导致三高宕机。
抉择哪一个 Swoole 框架
如果公司违心提供付费服务反对,倡议抉择 Hyperf,因为该框架对付费用户提供技术支持,并提供技术培训反对。
如果您无奈提供付费,同时有 PHP-FPM 做切面式的性能优化需要,倡议抉择 SW-X 该框架反对纯框架实现的 RPC 服务,无任何第三方依赖的服务中心治理十分不便。
同时该框架除了提供 Mysql、Redis、MonggoDB、RBMQ、Crontab、校验器、中间件、限流器等罕用组件外,还提供了大量丰盛的收费组件库,包含:身份证解析、经纬度反查省市区镇等大数据查问组件等,十分值得企业级开发应用。