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服务程序的请求。
     
  • 相关阅读:
    蚂蚁和木杆问题
    计算二进制中1的个数(转)
    strlen源码剖析(转)
    bashrc
    smb.conf配置文件(Centos)
    配置VNC+PuTTY+SSH Tunnel访问Linux
    标题: BASH最常见的激活模式
    KMP算法
    字符串中单词逆序
    Java中堆内存和栈内存详解
  • 原文地址:https://www.cnblogs.com/stonehat/p/6286966.html
Copyright © 2011-2022 走看看