CGI 与 fast_cgi
来源:互联网 发布:广州打车软件 编辑:程序博客网 时间:2024/05/30 05:42
2. web 服务器 以CGI 程序的交互
WEB服务器将根据CGI程序的类型决定数据向CGI程序的传送方式,一般来讲是通过标准输入/输出流和环境变量来与CGI程序间传递数据。 如下图所示:
CGI程序通过标准输入(STDIN)和标准输出(STDOUT)来进行输入输出。此外CGI程序还通过环境变量来得到输入,操作系统提供了许 多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了一些环境变量,用来向CGI程序传递一些重要的参 数。CGI的GET方法还通过环境变量QUERY-STRING向CGI程序传递Form中的数据。 下面是一些常用的CGI环境变量:
:
一个例子
说了这么多,你也许感觉烦了,写个小程序可能会更好的理解。 lighttpd + CGI,用c语言写cgi程序 。
lighttpd 配置 cgi, 打开cgi.conf, cgi.assign = (".cgi" => "") 设置 cgi 模块的扩展名和解释器。就本语句而言,表示cgi模块的扩展名是“.cgi”且该 cgi 模块不需要特别的解释器来执行。因为用c来写的是可执行文件。
下面是 test.c 代码:
#include "stdio.h"#include "stdlib.h"#include <string.h>int mian(){ char *data; data = getenv("QUERY_STRING"); puts(data); printf("Hello cgi!"); return 0;}
生成可执行文件放到你的服务器配置程序的目录下
gcc test.c -o test.cgi
访问:http://localhost/test.cgi?a=b&c=d 结果为:
a=b&c=dHello cgi!
通过环境变量"QUERY_STRING" 获取get 方式提交的内容,如果想获取post 提交的内容可以通过getenv("CONTENT-LENGTH"),Web服务器在调用使用POST方法的CGI程序时设置此环境变量,它的文本值表示Web服务器传送给CGI程序的输入中的字符数目。上面例子展示了cgi 程序与web服务器的交互。
3. CGI 与 Fast_cgi
CGI工作原理:每当客户请求CGI的时候,WEB服务器就请求操作系统生成一个新的CGI解释器进程(如php-cgi.exe),CGI 的一个进程则处理完一个请求后退出,下一个请求来时再创建新进程。当然,这样在访问量很少没有并发的情况也行。可是当访问量增大,并发存在,这种方式就不 适合了。于是就有了fastcgi。
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。
一般情况下,FastCGI的整个工作流程是这样的:
1.Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
2.FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3.当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。 Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
4.FastCGI 子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时, 请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
PHP-FPM与Spawn-FCGI
Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作。 但是有缺点,于是PHP-fpm就是针对于PHP的,Fastcgi的一种实现,他负责管理一个进程池,来处理来自Web服务器的请求。目前,PHP-fpm是内置于PHP的。
apache 模块方式
记得曾在xp 配置 apache + php ,会在apache 配置下面一段:
LoadModule php5_module C:/php/php5apache2_2.dll
当PHP需要在Apache服务器下运行时,一般来说,它可以模块的形式集成, 此时模块的作用是接收Apache传递过来的PHP文件请求,并处理这些请求, 然后将处理后的结果返回给Apache。如果我们在Apache启动前在其配置文件中配置好了PHP模块, PHP模块通过注册apache2的ap_hook_post_config挂钩,在Apache启动的时候启动此模块以接受PHP文件的请求。
Apache 的Hook机制是指:Apache 允许模块(包括内部模块和外部模块,例如mod_php5.so,mod_perl.so等)将自定义的函数注入到请求处理循环中。 换句话说,模块可以在Apache的任何一个处理阶段中挂接(Hook)上自己的处理函数,从而参与Apache的请求处理过程。 mod_php5.so/ php5apache2.dll就是将所包含的自定义函数,通过Hook机制注入到Apache中,在Apache处理流程的各个阶段负责处理php请 求。
有人测试nginx+PHP-FPM在高并发情况下可能会达到Apache+mod_php5的5~10倍,现在nginx+PHP-FPM使用的人越来越多。
- CGI 与 fast_cgi
- nginx--fast_cgi配置详解
- Fast CGI与CGI的区别
- CGI,FastCGI,PHP-CGI与PHP-FPM
- CGI,FastCGI,PHP-CGI与PHP-FPM
- CGI与fast-CGI的区别
- CGI,FastCGI,PHP-CGI与PHP-FPM
- CGI、FastCGI、PHP-CGI与PHP-FPM
- CGI,FastCGI,PHP-CGI与PHP-FPM
- CGI,FastCGI,PHP-CGI与PHP-FPM
- CGI与IIS
- FastCGI 与CGI区别
- cgi与fastcgi区别
- www与CGI
- servlet与cgi区别
- tomcat7与CGI
- CGI与FastCGI
- CGI与FastCGI
- hdoj2602 Bone Collector
- BLE协议栈构成及各部分概念解析
- 安卓-启动前台服务
- Parallel 线程
- 第27天(就业班) 泛型、泛型的反射、注解
- CGI 与 fast_cgi
- SVM支持向量机原理(三)线性不可分支持向量机与核函数
- HDU4424:Conquer a New Region(并查集 + 贪心)
- Android Studio Plugins
- android倒计时控件
- JIT与JVM的三种执行模式:解释模式、编译模式、混合模式
- vagrant的配置文件vagrantfile详解
- CentOs6.5安装和配置JDK7、TOMCAT7
- 港版-已过保 MacBookPro因显示屏涂层脱落去"天才吧"免费换屏过程