分享
 
 
 

生根于自由的土壤—FastCGI

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

Linux作为自由软件的代表,给IT行业带来了无限的发展空间。 Linux的透明性,无论给开发人员还是应用人员都有一个充分发挥的余地,在以 Linux系统为作业和平台上,更多的功能正在被不断地开发出来。像Server Push、FastCGI、EPERL、PHP3等许多的新功能,正是在Linux这样自由的土壤中才得以充分的发展。

一个网站的性能,主要表现在以下几个方面:系统响应时间、处理时间、用户等待时间和系统的输出负载,如果考虑经济因素还要加上技术成本。要提高网站的性能,在不改变硬件和网络结构的基础上,那么技术内涵就集中在优秀的程序上。目前来说,Server Push(推技术)和FastCGI两项新技术在完全不增加成本的基础上可以使你的网站达到最佳的性能。本文将详细介绍FastCGI技术。

什么是FastCGI

要说明一点,如果要使用FastCGI,你应该在以Linux为作业系统的Apache服务上编译FastCGI模块,大家可以到www.fastcgi.com去下载最新的模块,下载的这个模块中会有详细的编译说明。

多年以来,CGI已经成了服务器端应用程序开发的事实标准,虽然ASP技术的出现使服务器端应用程序开发更方便,但是ASP的局限性使目前仍以 Unix/Linux为作业系统并使用Apache为服务程序的绝大多数的服务器拒其于门外,CGI仍然唱着服务器端应用程序开发的重头戏。随着时间的推移,很多服务器在沉重的CGI负担下已经力不从心了。

还是让我们来看看CGI是如何工作的吧:当客户机对服务器请求CGI应用程序时,服务器建立一个进程来处理用户请求,完成后结束进程。当负载很低时, CGI能很好地工作,但是一个大型的站点上的各种不同类型的请求随时发生,在客户请求的负载很高时,服务器进程的设置和初始化所用的时间就成为网站性能的瓶颈。特别是像和数据库这样的应用程序连接时,初始化所用的时间较长。

当 FastCGI技术脱颖而出的时候,这个问题就得到了很好的解决。 FastCGI始终处于活动状态为来自服务器的请求提供服务。FastCGI是在服务器上运行一个“活动的程序"来处理服务器对应用程序的请求。 FastCGI始终处于活动状态,这正是它的优点,它在处理请求时没有启动新进程和对应用程序初始化的开销。服务器端可以用PERL、C、C++或 JAVA等语言来编写一个基于 FastCGI的应用程序,来不断地处理服务器对应用程序的请求。特别是对于Server Push这样的连接方式,服务器要不间断地响应用户请求,就要不断地让应用程序运行来支持服务器对应用程序的请求。

FastCGI的优点

我们知道,CGI是不能利用内存来作为缓存的,因为它为每一个请求运行一次应用程序,并在完成任务后退出。而 FastCGI可以很有效地利用内存来作缓存,大大地提高了它处理请求的性能。单独的FastCGI应用程序和 CGI相比,也许并没有很好地利用缓存,而一旦FastCGI被设计成多线程,就可以运行并发处理多请求的应用程序进程,这样多线程就可以共享进程内存而访问同一缓存。

FastCGI的另一大优点是它可以利用分布式网络系统来完成大规模的系统集成。一个网站,要完成用户的交互性要求,至少要具备电子邮件、BBS和聊天室这三大功能,考虑到数据安全性和数据库容量等因素,很少有网站把所有的数据都放在同一主机上。大家知道,由于进程环境原因,服务器只能调用本机的 CGI应用程序,这就给多主机的分布式系统带来局限性。而FastCGI应用程序不从进程环境中获取CGI变量,而是在FastCGI 应用程序和服务器之间建立一个“全双工”的连接,传递环境信息、STDIN、STDOUT和STDERR。这样我们就可以把FastCGI应用程序放置在另外的主机上,利用TCP/IP协议与主服务器远程连接。在主服务器对FastCGI应用程序发出请求时可以像本地机一样作出响应。这样做的好处是:

1.可以扩大网路系统的规模

2.可以减轻同一服务器的负载

3.多服务器可共享同一FastCGI应用程序。

如何编写FastCGI应用程序

让我们先来看看FastCGI是如何运行的:

正如你看到的一样, FastCGI在处理一个请求后继续保持运行,以便在新的请求到来时能立即处理请求。所以 FastCGI程序通常包括初始化代码段和封装程序主体的响应循环段,当然初始化完成后,主体程序不断循环运行等待请求的到来。只有在这个 FastCGI应用程序被系统撤销时循环才结束。

FastCGI的另一个优点就是从CGI转向 FastCGI非常简单,我们先来看一个传统的CGI:

示例一:NUMBER.CGI

#!/usr/bin/perl

# Variables

my $End = 10;

my $i;

# Content Header

print ″Content-type: text/html;CHARSET=gb2312\n″;

# Main loop

for ($i=0;$i〈$End;$i++)

{ print ″$i〈br〉;}

exit 0;

这个CGI在浏览器页面上从1到10按每行一个数字显示。

我们再看看如何用FastCGI来写这个程序:

示例二:NUMBER.FCGI

#!/usr/bin/perl

#为了使用FastCGI软件包,需要加入如下声明:

Use FCGI;

#初始化段和CGI初始化段一样。

# Variables

my $End = 10;

my $i;

while (FCGIaccpet() 〉= 0) {

# Content Header

print ″Content-Type: multipart/x-mixed-replace;boundary=BOUNDARY\n\n″;

#因为每个请求都要有相应的Content-Type头标来响应,所以我们把它也作为响应循环的主体代码段。

# Main loop

for ($i=0;$i〈$End;$i++)

{ print "$i〈br〉;}

}

exit 0;

因为FastCGI和服务器应用程序一样运行,所以只有当FastCGI接收到结束信号时才退出,否则它就一直运行。

虽然,从CGI转向FastCGI是非常容易的,但在具体的应用实例中我们还要注意,如果原来的CGI程序中存在可能使主体代码不能正常循环运行的代码时,必须对它进行修改,即对一些变量、数组重新初始化。FastCGI应用程序必须保证在处理任何一个请求时,现有的任何状态都不能对后来的请求产生影响。另外,程序员在编写CGI程序时,模块化设计可以使主程序运行时对那些不经常用到的功能模块相对“独立",只有在需要时才被调入运行中,这样可以加快主程序的运行。但是在转向FastCGI应用时就要考虑尽量在一个程序段中完成相关的功能,以减少程序运行时产生的进程数,而且程序各功能块之间又能充分地共享缓存。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有