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服务程序的请求。
     
  • 相关阅读:
    slice()与splice()
    apply和call函数
    参数arguments
    获取用户当前位置并设为中心点
    数组中元素为对象形式的去重
    判断浏览器环境(微信、支付宝)
    h5车牌号输入键盘
    点击事件的延迟
    jQuery修改伪元素
    webSocket认识
  • 原文地址:https://www.cnblogs.com/stonehat/p/6286966.html
Copyright © 2011-2022 走看看