• TIPI 阅读笔记 ----cgi 和 fastcgi


    FastCGI是Web服务器和处理程序之间通信的一种协议, 是CGI的一种改进方案,FastCGI像是一个常驻(long-lived)型的CGI, 它可以一直执行,在请求到达时不会花费时间去fork一个进程来处理(这是CGI最为人诟病的fork-and-execute模式)。

    fastcgi 的工作流程

      1、 Fastcgi 进程管理器自身初始化,启动多个CGI解析器进程,并等待来自Web Server的连接。

      2、web 服务器与 FastCGI 进程管理器进行 Socket 通信,通过FastCGI协议发送CGI环境变量和标准输入数据给CGI解释器进程。

      3、 CGI 解释器进程完成处理后将标准输出和错误信息从同一连接返回给web server

      4、CGI 解释器进程接着等待并处理来自web server的下一个连接。

    PHP中的CGI实现

      

    PHP的CGI实现了FastCGI协议,是一个TCP或UDP协议的服务器接受来自Web服务器的请求, 当启动时创建TCP/UDP协议的服务器的socket监听,并接收相关请求进行处理。随后就进入了PHP的生命周期: 模块初始化,sapi初始化,处理PHP请求,模块关闭,sapi关闭等就构成了整个CGI的生命周期。

    以TCP为例,在TCP的服务端,一般会执行这样几个操作步骤:

    1. 调用socket函数创建一个TCP用的流式套接字;
    2. 调用bind函数将服务器的本地地址与前面创建的套接字绑定;
    3. 调用listen函数将新创建的套接字作为监听,等待客户端发起的连接,当客户端有多个连接连接到这个套接字时,可能需要排队处理;
    4. 服务器进程调用accept函数进入阻塞状态,直到有客户进程调用connect函数而建立起一个连接;
    5. 当与客户端创建连接后,服务器调用read_stream函数读取客户的请求;
    6. 处理完数据后,服务器调用write函数向客户端发送应答。

       

  • 相关阅读:
    php-Zip打包文件
    PHP命令行类库 climate
    vim 添加块注释
    冒泡排序|插入排序
    PHP-SeasLog安装和使用
    链表
    多线程上下文切换
    竞态与线程安全
    线程的生命周期
    线程创建的两种方法
  • 原文地址:https://www.cnblogs.com/qlchan/p/5516712.html
Copyright © 2020-2023  润新知