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服务程序的请求。
     
  • 相关阅读:
    用js实现一个简单的mvvm
    ~~~持续更新,面向对象的编程,个人浅见
    前端直播功能开发总结
    echarts饼图去除鼠标移入高亮
    外包项目的感悟
    white-space:pre-wrap和word-break:break-all;
    转行两年,工作一年年,谈谈浅见
    html2canvas
    js点滴
    常用工具链接
  • 原文地址:https://www.cnblogs.com/stonehat/p/6286966.html
Copyright © 2011-2022 走看看