zoukankan      html  css  js  c++  java
  • 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函数向客户端发送应答。

       

  • 相关阅读:
    NetBeans 时事通讯(刊号 # 147 May 18, 2011)
    NetBeans 时事通讯(刊号 # 146 May 13, 2011)
    准备入职支付宝
    NetBeans 时事通讯(刊号 # 145 May 05, 2011)
    GAE 博客——B3log Solo 0.2.6 正式版发布了!
    用C语言实现一个简单的HTTP客户端(HTTP Client)
    Grack Ruby/Rack Git SmartHTTP Server Handler
    Cpy
    pyhttp 用Python演示Web服务器/客户端对HTTP协议的解析
    用C语法来写Python代码
  • 原文地址:https://www.cnblogs.com/qlchan/p/5516712.html
Copyright © 2011-2022 走看看