侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

nginx + php-fpm的处理流程对比workerman、hyperf等

技术  /  管理员 发布于 11个月前   913

nginx是怎么通信的?

1.nginx 配置里 9000 端口是 php-fpm 程序默认端口,nginx 应该和 php-fpm 保持了长连接;如果没有,那每次请求连一次,太愚蠢了,nginx 监听了 80 端口,它内部有连接 9000 端口的套接字(对 php-fpm 来说,nginx 是客户端)


2.nginx 的主套接字监听 80 端口,有客户端完整请求时,它通过连接 9000 端口的套接字转发数据给 php-fpm


3.主套接字监听端口,是等别人来找你(服务端);连接其它软件的端口的套接字,是找别人(客户端)两个套接字,套接字也是文件资源句柄,一个守着 80 端口等用户发请求过来,一个把请求转发给 php-fpm 监听的 9000 端口


4.本机进程间通信,也叫 ip 换回连接,本机程序通信还有 unix ,就是监听 .sock 文件,数据传输在监听文件上表现,tcp 环回连接 性能不如 unix 连接


nginx处理客户端请求过程

nginx接收客户端数据,判断是否构成完整http消息

1.判断是否转交 php-fpm 处理

2.有选择地(请求行和部分消息头是专门给 nginx 看的,可能会剔除)将http消息发送给php-fpm 

3.php-fpm 主程序创建子进程

4.子进程将 http 消息更新超全局数组(也可能是主程序做),引入 php 入口文件,返回 http 响应给主程序

5.php-fpm 主程序将 http 响应消息返回给 nginx

6.nginx 将 http 响应消息返给客户端,并决定是否关闭连接(在响应头 Connection 字段通知客户端)



nginx+php-fpm、workerman区别

1.

php-fpm 创建子进程处理请求,一个子进程处理一个请求,处理完关闭子进程。

workerman/hyperf/ 其它 php 服务器,创建子进程,

但是子进程是独立的服务器,子进程接收客户端连接、数据、解出完整请求消息,转化为 request 对象,

经过应用程序得到 response 对象,再转成响应消息,最后发送给客户端。


2.

php 服务器没有 php-fpm 的来一个请求创建关闭一次子进程的消耗。

它的主程序只用来监听子进程服务器的运行与维护,发现子进程关闭后重新创建新的子进程。

它的子进程,就做了 nginx + php-fpm 的事,同时没有频繁的更下级的子进程的创建关闭消耗。


3.

nginx转发客户端请求给php-fpm主程序

php-fpm创建子进程处理请求

子进程引入 php 入口文件,通过业务逻辑将请求转成响应,返给主程序并关闭自身

php-fpm 主程序将子进程处理的响应返给nginx

nginx响应客户端。


4.

workerman 主程序创建 N(可配置)个各类

(tcp/http/udp/unix/https/websocket…) 子进程(相当于服务器)

其中,http 子进程完成类似 nginx + php-fpm 功能


workerman/nginx+php-fpm性能优势对比

1.不需要像 nginx 和 php-fpm 那样本地端口通信

2.不需要像 php-fpm 那样创建子进程专门处理

3.数据常驻内存,数据单例化高,性能越来越快,不需要单独重复性引入所谓入口文件及对应整套逻辑,http 子进程监听某个端口(比如 80),接收客户端连接、数据,处理后返回数据给客户端


  • 上一条:
    udp、tcp、https、websocket协议知识及tcp的拆包粘包
    下一条:
    上个世纪程序员被解雇后“报复方案”被曝光了
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 性能测试工具、HTTP基准测试工具:wrk(0个评论)
    • namesilo域名+香港服务器+acme.sh给网站生成免费ssl证书流程步骤(0个评论)
    • 控制反转IOC设计模式简单的示例代码(0个评论)
    • 来自京东开发者的接口优化的常见方案实战总结(0个评论)
    • 最新访问谷歌Google镜像/学术/搜索_GitHub镜像/下载加速链接2023/2/16持续更新(0个评论)
    • 近期文章
    • 在go语言中使用GoPDF包把html生成PDF文件示例(0个评论)
    • 在go语言中创建和解析(读取)符号链接示例(0个评论)
    • ubuntu 22.04系统中报错:Python 3.6 is no longer supported by the Python core team...解决方式(0个评论)
    • Laravel 10.4版本发布(0个评论)
    • mysql5.7中实现分区表及分区where in查询示例及分区分表对比浅析(0个评论)
    • nginx + vue配置实现同域名下不同路径访问不同项目(0个评论)
    • 在laravel框架中的5个HTTP客户端技巧分享(0个评论)
    • 在go语言中使用FFmpeg库实现PCM音频文件编码为mp3格式文件流程步骤(0个评论)
    • gopacket免安装Pcap实现驱动层流量抓包流程步骤(0个评论)
    • 在laravel项目中实现密码强度验证功能推荐扩展包:password-strength(0个评论)
    • 近期评论
    • 博主 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 @ xiaoB 你只管努力,剩下的叫给天意;天若有情天亦老,..
    • xiaoB 在

      2023年国务院办公厅春节放假通知:1月21日起休7天中评论 会不会春节放假后又阳一次?..
    • BUG4 在

      你翻墙过吗?国内使用vpn翻墙可能会被网警抓,你需了解的事中评论 不是吧?..
    • 博主 在

      go语言+beego框架中获取get,post请求的所有参数中评论 @ t1  直接在router.go文件中配就ok..
    • Jade 在

      如何在MySQL查询中获得当月记录中评论 Dear zongscan.com team, We can skyroc..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2017-09
    • 2018-01
    • 2018-07
    • 2018-08
    • 2018-09
    • 2018-12
    • 2019-01
    • 2019-02
    • 2019-03
    • 2019-04
    • 2019-05
    • 2019-06
    • 2019-07
    • 2019-08
    • 2019-09
    • 2019-10
    • 2019-11
    • 2019-12
    • 2020-01
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客