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函数向客户端发送应答。

       

  • 相关阅读:
    jchdl
    jchdl
    UVa 10256 (判断两个凸包相离) The Great Divide
    UVa 11168 (凸包+点到直线距离) Airport
    LA 2572 (求可见圆盘的数量) Kanazawa
    UVa 10652 (简单凸包) Board Wrapping
    UVa 12304 (6个二维几何问题合集) 2D Geometry 110 in 1!
    UVa 10674 (求两圆公切线) Tangents
    UVa 11796 Dog Distance
    LA 3263 (平面图的欧拉定理) That Nice Euler Circuit
  • 原文地址:https://www.cnblogs.com/qlchan/p/5516712.html
Copyright © 2011-2022 走看看