现有PHP项目引入Swoole4协程支持的流程及难点
Swoole4以后,协程化支持已经完善,而且支持大量的PHP扩展自动协程化.一些基于Swoole4的框架也蓬勃发展,光看着文档就让人跃跃欲试.
可是对于现有旧项目如何引入并启用Swoole协程成了实际场景中的客观问题,因为协程性质及生命周期等缘由,这并不是想象的那么容易.
本文整理了在现有项目中引入Swoole4并开启协程的一些步骤及须要注意的问题,指望能够为有须要的人提供帮助.
前置要求
请阅读Swoole文档中
环境依赖的章节,本文只针对代码部分的调整.下文默认已成功编译安装了Swoole4扩展.
框架代码部分
首先请查阅所用框架是否有结合Swoole的开源方案,如laravel-s等.若有可按需选用,如没有也参照业务代码部分对框架代码进行改造.(
这会致使升级框架版本变困难)
业务代码部分
- 首先阅读Swoole文档中协程编程须知的章节.
- 对单例对象按协程ID作隔离,防止单例对象跨协程使用.对Mysql,Redis等链接资源须要defer进行回收复用或关闭,防止链接数持续增长.
- 对全局变量及常量作评估,全部可能引发问题的地方所有按协程ID作隔离.
- 对项目内直接echo,print之类输出的位置作修改,或使用ob_start方法进行获取输出内容进行处理.
- 对项目内使用不支持自动协程化的库作修改,采用协程客户端进行替换.(如:curl).
- 对项目内使用exit,die的地方作修改.
- 对static静态类,属性或变量及引用传递进协程的变量都要当心操做,尽可能避免这种状况,只使用局部变量.
- 对每次修改作好单元测试,作好备份及回滚措施.
- 可从某些单一场景下入手逐步进行修改.(如:某个单一业务模块,某个简单PHP脚本等).
总结
上述修改看似内容很少,可是在一个现有的项目中进行修改并保证服务正常运行却并不是易事,但愿你们当心操做,早日成功.
欢迎关注本站公众号,获取更多信息