关于CGI:Tomcat、PHP、Perl、Python和FastCGI之间的关系

如前文所述,Web服务器是一个很简单的东西,并不负责动态网页的构建,只能转发静态网页。同时Apache也说,他能支持perl,生成动态网页。这个支持perl,其实是apache越位了,做了一件额外的事情。

现在我们看生成动态网页这件事情。

CGI的定义是:外部应用程序与Web服务器之间的接口。

明白了吧?也就是说,所谓的动态网页,都是要外部应用程序生成的,而不是Web服务器能干的事情。所以,最初的、最简单的CGI,是使用C来写的,很简单。

到了后来,大家觉得老用C也不是个办法啊,效率这么慢,老板逼得紧,天天加班不是个事,于是PHP、ASP、Java、Perl、Python这些高级语言就掺合进来了。

其中,ASP由于是微软一家单独支撑,不开源,还要买他那么贵的服务器软件,开发者就不想用了,越来越没落。

用Java语言来写CGI,就是JSP技术

PHP的正名为:超文本预处理语言。从这个名字可以看出,就是专门为动态网页而生的,它的好处是可以潜入HTML,而不是像C那样重新生成整个文本。这个现在已经不是优势了,JSP一样可以做到这点。PHP由于是动态加载,边解释边执行,所以效率没有java高,这个问题可以用预编译和使用C、C++模块来解决。

这些语言里面,Java的发展是最迅速的,所以Java产生了一堆好东西,比如Tomcat,比如IBM的Websphere,WebSphere是真正的应用服务器,而Tomcat还算不上,因为他还不能真正支持很多J2EE的API,但是Tomcat作为servlet的容器,基本满足写CGI的需求,这样使得Tomcat被使用得非常广泛。

Tomcat是apache的一个子项目,它也不务正业,也支持做web服务器的功能,这是很搞笑的,你一个动态网页处理容器,干嘛要做web服务器呢?这让我想到做产品时产品经理的贪嗔痴。但Tomcat全部使用java完成,并且,他是单进程结构,是使用CPU密集型的架构来设计的,而上篇文章讲到web服务器其实是IO密集型的,这样Tomcat在处理大规模的Web请求时,根本没法玩。所以很多人说,使用apache处理静态网页,使用tomcat处理动态网页。

除了Java有Tomcat作为容器来进行支撑外,其他的CGI就很土了,都是脚本,一是需要边解释边执行,二是都是一锤子买卖,一锤子买卖的意思是,这些个脚本的CGI,都是使用其解释器+CGI部分合成一个CGI程序,apache接收到请求后,就启动一个CGI程序,生成动态内容后,CGI程序退出。这种方式也太土鳖了,让我这种长期习惯于windows编程的人非常鄙视。

这种方式显然是不行的,效率非常低,所以,fastCGI就出来了,fastCGI在CGI和web服务器中间再加了一层。

fastCGI用来管理多个CGI进程,它负责同时生成和回收多个CGI进程,以服务器的内存空间,换取处理时间。

一个不相关的感想:不论CGI怎么变,fastCGI可以以不变应万变,如果把网页的请求过程看成产业链,fastCGI无疑是一个非常好的切入点,可以经久不衰,并且以不变应万变。

经过fastCGI优化之后,从效率上讲,PHP等脚本语言与java只差一点了,这点就是解释执行,所以php需要预编译,进行代码缓存之后,效率应该可以接近jsp。

另外一个问题是,nginx以减少进程的方式革了apache的命,会不会有新的程序,以nginx的方式,来革fastCGI的命呢?

关于CGI:Tomcat、PHP、Perl、Python和FastCGI之间的关系,布布扣,bubuko.com

时间: 2024-11-10 00:19:08

关于CGI:Tomcat、PHP、Perl、Python和FastCGI之间的关系的相关文章

Python面向对象(类之间的关系)(三)

类与类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻的. 随时可以更换另外一个东西来完成此操作 class Plant: def __init__(self,zhonglei,xue,gongjili): self.zhonglei = zhonglei self.xue = xue self.gongjili = gongjili def da(s

CGI、FastCGI和PHP-FPM关系图解

CGI.FastCGI和PHP-FPM关系图解 ? webapp即是php解析器等 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器.接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程,Web server再把结果返回给浏览器.这就是一个完整的动态PHP Web访问流程,接下来再引出这些概念,就好理解多了, CGI:是 Web Server 与 Web Appl

split function of Perl,Python,Awk

使用中常用到Perl,Python,AWK,R, 虽然Java,C,C++,Vala也学过但是就是不喜欢,你说怎么办. 看来一辈子脚本的命. Perl @rray = split /PATTERN/, STRING, LIMIT 可以看出split由2部分(STRING,PATTERN)和可选的LIMIT部分构成,反正split么,万变不离其宗,都要有 你要split的String,split的界定,split的保存,其他的可以外加 我们举一个简单的例子: > cat test.txt (为了对

shell perl python 剖析

先不用说"无论什么语言都是一种工具".工具是我们身体的一部分,解放军解放台湾靠"小米加***"? "工具无所谓"论可以休矣.对于实际的软件工程工具和平台的选择是很重要的,有时候是致命的1. perl是强大的, perl=shell+awk+sed+一堆命令行工具.   但是反过来也一样shell+awk+sed+一堆命令行工具可以替代perl. 2. shell的简约,可读性比perl好,工具之间通过命令行stdio管道通信,任何一个小部分都可以

awk,perl,python的命令行参数处理

Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性化到家了,但是命令行上就很原始,但是很有分类感.还是会喜欢Perl一点(至少还可以动脑子,不至于生锈),感觉Perl是个杂合子,而python像胡彦斌,bash像韩红(最近看我是歌手第三季,嘻嘻).Bash就是家常菜了,虽然Perl可以大部分代替Bash的功能,像grep sort map等,但是某

nginx fastcgi php-fpm的关系梳理

CGI(Common Gateway Interface)CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,其程序须运行在网络服务器上.CGI可以用任何一种语言编写,只要这种语言具有标准输入.输出和环境变量.如php,perl,tcl等. FastCGIFastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fo

nginx、fastCGI、php-fpm关系梳理

前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx才可以解析php脚本.那么,这样配置的背后原理是什么?nginx.fastCGI.php-fpm之间又有什么关系呢?博主一直有这样的疑惑,由于无法理清nginx.php-fpm之间的关系,遇到nginx解析不了php脚本的时候,往往不知所措,花费的问题排查时间也非常长.因此,特地抽时间了解这背后的原

nginx、fastCGI、php-fpm关系梳理(转)

前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx才可以解析php脚本.那么,这样配置的背后原理是什么?nginx.fastCGI.php-fpm之间又有什么关系呢?博主一直有这样的疑惑,由于无法理清nginx.php-fpm之间的关系,遇到nginx解析不了php脚本的时候,往往不知所措,花费的问题排查时间也非常长.因此,特地抽时间了解这背后的原

nginx、fastCGI、php-fpm关系梳理(转载参考)

nginx.fastCGI.php-fpm关系梳理 还可以参考:http://www.cnblogs.com/skynet/p/4173450.html 前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装php-fpm扩展并启动php-fpm守护进程,nginx才可以解析php脚本.那么,这样配置的背后原理是什么?nginx.fastCGI.php-fpm之间又有什么关系呢?博主一直有这样的疑惑,由于无法