zoukankan      html  css  js  c++  java
  • FastCgi与Cgi

     
    他们之间的不同在于
     
    FastCgi的进程是常驻的,监听一个socket, 无线循环等待。当有请求的时候,web服务器会将请求通过socket发送给fastcgi进程管理程序(例如php-fpm),fastcgi管理程序会将请求通过sockert转发给fastcgi程序, 收到请求就会进行处理, 处理完就会继续等待。 fastcgi进程管理程序启动的时候是通过exec()函数启动多个fastcgi子进程,也就是worker进程,高并发情况下,会将请求分散到不同的子进程上。 既然基于socket的,那么应该是可以将fastcgi部署在其他主机上。
     
     
    cgi程序, web服务器每得到一个请求,就会调用popen的方式启动一个cgi进程, 该cgi进程会读取环境变量和标准输入, 然后进行处理,输出到标准输出哪里。 popen会返还一个管道的文件描述符,以此可以进行输入输出。
    下面是一个cgi程序例子
    #include "stdio.h"
    #include "stdlib.h"
    #include <string.h>
    
    int mian()
    {
         char *data;
         data = getenv("QUERY_STRING");
         puts(data);
         printf("Hello cgi!");
    
         return 0;
    }
     
    老生常谈: cgi对每个请求都会新建一个进程处理,处理完就关闭。 fastcgi进程是常驻的,初始化的时候不处理请求, 在主循环中接受请求处理。 fastcgi进程管理程序则是统一管理fastcgi进程的,负责预先启动fastcgi、建立fastcgi进程池、转发请求给fastcgi进程、转发返还给web服务程序、监听socket接收web服务程序的请求。
     
  • 相关阅读:
    jzoj3294. 【SHTSC2013】超级跳马
    jzoj3243. Cube
    jzoj3242. Spacing
    jzoj3232. 【佛山市选2013】排列
    jzoj3297. 【SDOI2013】逃考
    jzoj4800. 【GDOI2017模拟9.24】周末晚会
    学习burnside、polya小结
    学习splay或spaly小结
    一个初学者的辛酸路程-了解Python-2
    一个初学者的辛酸路程-初识Python-1
  • 原文地址:https://www.cnblogs.com/stonehat/p/6286966.html
Copyright © 2011-2022 走看看