如前文所述,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之间的关系的更多相关文章

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

    类与类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻 ...

  2. CGI、FastCGI和PHP-FPM关系图解

    CGI.FastCGI和PHP-FPM关系图解   webapp即是php解析器等 当Web Server收到 index.php 这个请求后,会启动对应的 CGI 程序,这里就是PHP的解析器.接下 ...

  3. shell,perl,python的区别

    shell+sed+awk严格的讲, shell不是一种编程语言, 但是shell有自己的控制流结构(判断,循环,选择),运算以及函数等编程语言特性, 加上shell命令组织在一起构成脚本, 能够完成 ...

  4. php CGI、Fastcgi、PHP-FPM的详细介绍与之间的关系

    以下PHP CGI.Fastcgi.PHP-FPM的一些信息归纳和汇总----->详细介绍与之间的关系 一:CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的 web ...

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

    Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...

  6. split function of Perl,Python,Awk

    使用中常用到Perl,Python,AWK,R, 虽然Java,C,C++,Vala也学过但是就是不喜欢,你说怎么办. 看来一辈子脚本的命. Perl @rray = split /PATTERN/, ...

  7. 正则表达式-使用说明Regular Expression How To (Perl, Python, etc)

    notepad++ wiki about regular expression 正则表达式-使用说明Regular Expression How To (Perl, Python, etc) http ...

  8. nginx tomcat 自动部署python脚本【转】

    #!/usr/bin/env python #--coding:utf8-- import sys,subprocess,os,datetime,paramiko,re local_path='/ho ...

  9. RHEL / CentOS Linux Install Core Development Tools Automake, Gcc (C/C++), Perl, Python & Debuggers

    how do I install all developer tools such as GNU GCC C/C++ compilers, make and others, after install ...

随机推荐

  1. String,StringBuffer与StringBuilder

    1. String,StringBuffer与StringBuilder的区别 String:存储在常量池中:是不可变的字符序列,任何对String值的改变都会引发新的String对象的生成,因此执行 ...

  2. Ubantu 16.4 samba安装配置

    本文总结了Ubantu 16.04 环境下的samba安装.配置及使用.本文为原创,也是我的第一篇博客,以后会经常写博客,记录自己的学习.总结及研究,让博客见证着我成长的轨迹. 下文中的所有命令均使用 ...

  3. 设置select标签的高度

    当无法给select标签设置高度的时候,给他加一个背景色,就可以设置了.

  4. 005.Getting started with ASP.NET Core MVC and Visual Studio -- 【VS开发asp.net core mvc 入门】

    Getting started with ASP.NET Core MVC and Visual Studio VS开发asp.net core mvc 入门 2017-3-7 2 分钟阅读时长 本文 ...

  5. 接口开发,tp5结合swagger-ui安装方法

    今天看到老java用的swagger提供接口,美观好用,方便维护,不是写好接口之后再写接口文档,麻烦的要死.网上找了找结合php的方法,在此记录一下,以后再开发接口就可以方便很多了. Swagger的 ...

  6. 【JS小技巧】JavaScript 函数用作对象的隐藏问题

    用户反馈 @消失的键盘 在论坛反馈了一个问题,在 AppBoxMvc 中的 Title 模型中,如果将 Name 属性改名为小写的 name 属性,就会报错: 因为这是一个 ASP.NET MVC 的 ...

  7. 学习java窗口基本操作时无聊写的

    学习java窗口基本操作时无聊写的 就当记录 代码如下: package day08; import java.awt.BorderLayout;import java.awt.Color;impor ...

  8. nopCommerce 3.9 大波浪系列 之 引擎 NopEngine

    本章涉及到的内容如下 1.EngineContext初始化IEngine实例 2.Autofac依赖注入初始化 3.AutoMapper框架初始化 4.启动任务初始化 一.EngineContext初 ...

  9. ETL作业自动化调度软件TASKCTL4.5安装程序是选项解释

    下文仅针对TASKCTL4.5有效,在执行安装程序后,会看到安装程序有4个选项,其中,1和2是需要了解的. 1, 典型安装: 这个选项是单机部署,在第一次使用TASKCTL的时候,我用的是这种安装方式 ...

  10. SQL Server Alwayson创建代理作业注意事项

    介绍 Always On 可用性组活动辅助功能包括支持在辅助副本上执行备份操作. 备份操作可能会给 I/O 和 CPU 带来很大的压力(使用备份压缩). 将备份负荷转移到已同步或正在同步的辅助副本后, ...