为什么现在使用 cgi 的网站那么少,FastCGI 更少了

为什么现在使用 cgi 的网站那么少,FastCGI 更少了

这个问题困惑了很多网友,
下文是一段半月前与某网友的讨论的整理, 希望对大家有帮助.

[问1]
我也是 c cgi 的坚定支持者,而且亲自试验过 FastCGI 的稳定性和高性能。但是很长时间我也没查明白:为什么现在使用 cgi 的网站那么少,FastCGI 更少了?

[答1]
你这个问题问的非常好,
都知道 CGI 只是个技术标准(目前使用的是 CGI/1.1), 因为该标准非常简单所有它很容易用各种高级语言和脚本语言进行描述; 但它也给 CGI 开发者带来了困难, 那就是过去没有非常好的开发工具以开发方便开发者开发复杂的应用. 很多时候它们不得不手工 printf 输入每一句 html 语句. 这样严重限制了传统 cgi 的发展;

与此同时, 另一批工具(暂时称之为泛 CGI吧), 如 asp, jsp, php, 它们继承了 CGI 标准的简单性, 同时提供了相应的解释或编译工具. 通过这些工具, 开发人员只要在 html/xml 模板文件中嵌入相应(脚本)语句即可, 特别是 asp.net 开发环境, php 之后的模板技术等, jsp 等 strust 框架等都为开发人员提供了更为抽象化的开发工具, 使开发人员彻底忘记了它们(asp, php, jsp等)的前身 CGI (之所以称它们为泛 CGI, 因为它们都是 CGI 技术的继承和发展者).

注: CGI 是指 WEB server 与 WEB 应用程序之间的通用接口标准, 即: Common Gateway Interface.

[问2]
原来如此,总觉得他们的原理和cgi类似,实际正是cgi的拓展和封装,我们完全可以自己用 c 编写更强的拓展和封装!

[答2]
是的, CSP/eybuild 是一种类似于 asp, jsp, php 的 C/C++ 语言的开发工具, 它能弥补了传统 C 开发 CGI 的不足, 同时提供了类似 asp, jsp, php的模板技术,虚拟目录,自动扫描链接等技术, 使 c 开发人员可以不编写一句 c 代码的的情况下即可编写一完整的站点框架, c 开发人员只要专注编写逻辑处理即可, 使得 c 开发人员和 html/jsp/css 等开发人员进行有效的分离. 这使得 cgi 编写非常简单, asp, php, jsp 等的站占只是换一编程即可.
CSP/eybuild 对 FastCGI 拥有很好的支持和裁剪性, 只要在添加一个编译选项 cgi 程序即转成了 fastcgi 程序
[问3]
php的性能是因为成了服务器的模块,但是 c cgi 也能编写成模块的模式,特别是 FastCGI 天生几乎就是服务器的模块,可是为什么用的人那么少呢?
而且我自己的试验证明,FastCGI 极稳定,不稳定基本是程序没编写好,有内存泄露、忘记重置等问题造成的.

[答3]
PHP 也可以作为 CGI 运行, 同时也支持 FastCGI.
php 性能是因为成了服务器的模块, 这导致 php 非常依赖服务器, 所以通常 php 只在 apahce 服务器具有非常好的性能, 换个 webserver 甚至它是不能运行的. 严格遵守 CGI 标准的应用工具应该是不存在这些问题的.
不过, 在适当的应用中, 为了性能牺牲一些特性为是必要的.

对 FastCGI 要有充分的信心, FastCGI 没有问题, 在很多应用中证明它都有很好的表现.
前面提及, 用的少主要原因是在 CSP/eybuild 之前大家没有很好的编写复杂应用的 CGI 开发工具.

[问4]
实际应用上,多数人会选择 apache 或 IIS ...

[答4]
WEB 服务应用领域是主要用这两个服务器, 不过其它 web 应用(如设备管理/控制等), 使用的 webserver 就很广泛了, 如 thttpd, mini-httpd, goAhead, lighttpd, boa, ...
它们可能还要运行在不同的 CPU 架构(如 inter, xscale, arm, mips, ...)下, 不同的存储器限定环境中(如只有 2M, 8M, 16M的内存) 无硬盘, 只有几M的 flash 等,
这些环境的应用中, 目前最主要的 web 开发语言都是 c, ...

[问5]
我认为随着ajax应用的普及,模板技术有逐渐被取代的趋势

[答5]
ajax 是一种非常不错客户端技术, 通在不刷新整个页面的情况下给用户带来很新体验. 它服务器端的技术互相补充相互依赖, 从目前的形式看, 还很难说谁会取代谁的趋势. 根据项目和应用不同, 开发者应该灵活选择它们要选用的开发工具和开发技术, 并进一有效的融合, 不宜单纯一味追求某一技术.
不得不承认, 包括 CSP/eybuild 的很多开发应用都采用了 Ajax .

[问6]
web标准客户端的结构、表现、行为分离,确实是好框架,是发展趋势,而且能简化服务器端开发。我认为随着应用的普及,模板技术会被取代。那时候,开发服务端只要编程就可以了,完全脱离页面的束缚。

[答6]
呵呵, W3C 关于 结构、表现、行为分离 确实极大地推动了 web 技术的发展,
但它主要是指结构-(html)、表现(css)、行为(js) 三者的分离, 是一种客户端技术, 与取代模板关系不大.
一般认为 ajax 的目标把富客户端, 弱服务器, 它可能对 服务器端的模板技术有一对冲击.

另外, CSP/eybuild 的 eyForm(javascript 库) 就是关于结构与行为分离的有效性检查的 JS 库, 会对你理解结构、表现、行为分离有所帮助.
以上只是个人的拙见, 希望能解答你的问题.

(为避嫌, 故隐去部分内容).

虽然是在做广告,但还是要支持一下的。
因为以前我也用c做过cgi,用c写过网页,能体会到其中的痛苦,哈哈哈。
基于goAhead的,

支持
1,2.   c/c++本身的模板技术已经足够了。 论坛里面我写过一个模板能满足99%的cgi开发
      而java的一些框架和技术,是其他产品无法或者难以替代的
3,4 错误,php比c cgi更适应各种平台。什么情况会只有2m内存,硬盘? 也只能适合嵌入式了
5。6 ajax 技术不能代替任何现有的,对google的盲目崇拜而已。ajax被用在很多不适合的地方, 大多又都带来加大服务器消耗的代价


使用FastCGI只会愈来愈少。


QUOTE:
原帖由 xinglp 于 2007-5-21 20:33 发表
我也是从C CGI/FastCGI起步的,这方面用的很少,现在都开始直接写Web服务器了,但是还是很难在这方面找工作,一般用C开发的地方都是高负荷的场合,开发成本高用的自然就少,中国人习惯见效块,也就是Java的快捷开 ...

没实际的工作经验, 你不了解现在的IT环境。
web需要简单架构。简单的增加服务器,就能平衡php,jsp的负载,即便sina,yahoo这样大网站。

分布式的系统,web的性能瓶颈基本都在DB和I/O, 开放语言本身的性能都可以忽律不计。从未见过瓶颈在web服务器的。
一台服务器才多少钱,一个高级程序员月薪多少?

不必中国人习惯见效快的,  有喜欢见效慢的吗?
用c封装一套cgi的库也不是一件很麻烦的事情。
就单纯的从开发速度,开发成本和维护成本还是php更适合web开发。
个人感觉web页面也实在算没有必要用c开发。
当然如果用c来写cgi的话对程序员的要求稍微高点。
说白了CGI会越来越少,Web应用开发有两种趋势,JSP .Net...和专用Web服务器
楼主newzy好久不见了,呵呵

一些纯技术架构、追求性能和平台成本的项目解决方案都会选择cgi方式,如果项目负责人了解FastCGI就更好了

基于cgi(c)的新型架构LAPC/F(Linux、Apache、PostgerSQL、gcc(c)、FastCGI)
c代码嵌入html开发方式(类似于asp、php),方便页面开发
SQL嵌入c代码开发方式(E/SQL),代码与sql融合使数据库操作更直观,且便于数据库系统移植
c代码中允许使用中文变量名、函数名,使代码更容易维护
...尽在
http://lapcf.calvinwilliams.name/