作为一个拥有生产环境主导部署 swoole 的人,我决定现身说法一波儿,但可惜我并不是来推荐你用 swoole 的,我的态度是中立,我只客观描述事实,你自己做决定。
项目是我 前前东家 的时候,我是服务端主程,产品是基于 LBS 地理位置的陌生社交,名字叫做积目(不怕有人说我广告狗),用户在百万级别。这种情况下,至于你们敢不敢上 swoole,反正我敢。。。确切说,我是从一开始就直接用了 swoole,一直从几千用户支撑到了百万(可不是一百万,比这个还要高)以上。
说下这个东西相对于 fpm 的优势:
1、常驻内存,节省了 php 代码反复解析耗费的资源
2、可以使用长链接方式连接 mysql 等数据存储介质
3、可以使用 TCP 协议了
4、服务器上确实不用部署 nginx,fpm 了
我们从来没有尝试过异步写业务,这里的准则就是“没有钢筋钻,不烂瓷器活”。
swoole 在项目里的主要用途是部署内网 RPC 服务,对外则有 API Gateway 统一协议,端上是无法连接到 swoole 服务器的。
1、我们用的比较保守,尚未遇到过 core dump
2、内存泄漏一直是有的,但没有那么严重,除非你自己手很残,这个问题可以通过 max-request 参数来解决,类似于 fpm 中的 max-request
不会推荐,也不会不推荐,毕竟也不是什么银弹,用站着说话不腰疼的方式说就是“其实就是个 epoll 高性能网络库+worker 进程(只不过这个 worker 中能写异步代码也能写同步代码)”。
然后是这个东西在大公司,一直是没什么场景的,尽管天峰在不断布道。原来我在 momo 的时候,我知道的只有我们部门一个小项目在用;现在我在 didi,除了王晶(桶哥)那个部门,其他部门也暂未听说有场景应用。不过有趣的是,最近天峰去 momo 专门布道 swoole 了,是我 momo 同事告诉我的。
swoole 本身的值得尊重的,毕竟他弥补了现有 PHP 生态里最大的缺陷;但是,我并不会说什么但是,没有了。
对于绝大部分 PHPer 从业者而言,如果自身不具备科班出身或者较为踏实的基础,swoole 看起来很难,你不能指望以前连进程、socket 等、同步异步阻塞非阻塞这些概念都不理解的人能很快接受吸纳这个东西;
但实际上对于科班出身或者基础较为踏实的人来说,这个东西其实确实也没什么的。
最后说点儿有用的,如果你打算转 swoole,而且你的小伙伴基础不太好,最好保证你的小伙伴们快速熟悉一下下列概念,对于开展工作会有很大帮助,我认为是算是短期育肥比较有效的方法:
1、进程
2、进程间通信
3、同步异步阻塞非阻塞
4、socket,epoll
5、TCP 协议,主要是拆包,粘包概念
然后安利一下当初我们用的基于 swoole 1.9.22 封装的东西,希望你协助你快速开展业务拆分:
https://github.com/elarity/ti-rpc这个比 swoft 粗暴粗旷很多,几乎没有做什么厚重封装,理解起来会快太多太多