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的优缺点

优点:

  1. 部署简单
  2. 调试方便
  3. 基于传统php的项目非常多,易于参考

缺点:

  1. 每次http请求都要加载全部的项目文件
  2. php-fpm性能不佳,并发性能不好
  3. 核心异步网络不支持

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

  1. 先通略看一看swoole的官方文档
  2. 看一下并实现慕课网singwa老师的两个swoole教程
  3. esayswoole的官方入门视频easyswoole入门视频
  4. 看一下开源swoole项目,研究别人怎么用swoole实现业务逻辑 https://www.fashop.cn/ | 博客:woann-chat 基于 laravelS 和 layim 的聊天系统
  5. 到这里,你应该就能算会用swoole的phper了

本人实际项目

Laravel 项目深度优化过程
jin-chat 基于 EasySwoole 和 layim 的聊天系统

本作品采用《CC 协议》,转载必须注明作者和本文链接
未经允许禁止转载 -- 苦力小林,
本帖由系统于 4年前 自动加精
讨论数量: 12

"php-fpm 监听127.0.0.1:80"这里就写错了,监听9000或者其他端口,不然跟nginx的监听的80端口冲突了

4年前 评论

开发两年开始使用 swoole 扩展确实不错啊

4年前 评论

能不能说下你的感受。我现在一个视频还没看完

4年前 评论

swoole 对平时业务开发的影响

4年前 评论

@悲剧不上演 开发其实没什么区别,前提你要知道一些限制,比如不能用die、有些变量不会撤消,避免这样就行了,还有就是部署难度高一点

4年前 评论

www.example.com 不应该是www.test.cc吗? :joy:

4年前 评论

@我真叫阳阳 复制过来的时候少改了一点,多谢提醒

4年前 评论

@Double-Jin 兄弟真不是我杠,流程图中三个路由还是不一样哈;跟我一样;我经常在开发中少个分号错个字母啥的,没少挨领导批;

4年前 评论

@我真叫阳阳 开发中少了分号IDEA会报错的啦

4年前 评论

fast-cgi是协议没有监听作用,php-fpm是实现这个协议的程序

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!