談?wù)凜GI的開發(fā)
發(fā)表時(shí)間:2024-05-26 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]現(xiàn)在這年頭,各種web開發(fā)技術(shù)各領(lǐng)風(fēng)騷,php,ASP,jsp都是比較時(shí)髦的,于是人們似乎把CGI淡忘了,其實(shí)CGI最受詬病的是它的性能比較差,占用的系統(tǒng)資源比較高。許多程序員因此覺得CGI沒有前途。實(shí)際上,CGI除了傳統(tǒng)的優(yōu)點(diǎn)如:安全性高,接口標(biāo)準(zhǔn)簡(jiǎn)單,易于用不同語(yǔ)言實(shí)現(xiàn)外,近些年來(lái)出現(xiàn)的如fa...
現(xiàn)在這年頭,各種web開發(fā)技術(shù)各領(lǐng)風(fēng)騷,php,ASP,jsp都是比較時(shí)髦的,于是人們似乎把CGI淡忘了,其實(shí)CGI最受詬病的是它的性能比較差,占用的系統(tǒng)資源比較高。許多程序員因此覺得CGI沒有前途。
實(shí)際上,CGI除了傳統(tǒng)的優(yōu)點(diǎn)如:安全性高,接口標(biāo)準(zhǔn)簡(jiǎn)單,易于用不同語(yǔ)言實(shí)現(xiàn)外,近些年來(lái)出現(xiàn)的如fastcgi和mod_perl等技術(shù)已經(jīng)可以彌補(bǔ)它在速度、資源方面的缺點(diǎn)。
下面以fastcgi技術(shù)為例簡(jiǎn)單說(shuō)明:
傳統(tǒng)CGI技術(shù)之所以速度慢,主要是因?yàn)橐话?CGI每一次啟動(dòng)都要啟動(dòng)一個(gè)進(jìn)程,如果有1000人同時(shí)在一個(gè)聊天室里聊天,那么就會(huì)產(chǎn)生1000個(gè)進(jìn)程。對(duì)于有后臺(tái)數(shù)據(jù)庫(kù)的CGI,意味著每次請(qǐng)求都是一次數(shù)據(jù)庫(kù)連接、查詢、斷開的過程。這樣的問題即使用C語(yǔ)言也不能解決,而像perl這樣的解釋語(yǔ)言更增加了啟動(dòng)解釋程序的負(fù)擔(dān)。
fastcgi的設(shè)計(jì)思想就是啟動(dòng)一個(gè)cgi進(jìn)程以后不退出,一般情況下只要進(jìn)行一次的操作如數(shù)據(jù)庫(kù)連接、sql語(yǔ)句的準(zhǔn)備都可以在啟動(dòng)時(shí)完成,以后再有新的請(qǐng)球,就只要直接查詢,不需要解釋、連接數(shù)據(jù)庫(kù)、產(chǎn)生新進(jìn)程,由此可以大大提高系統(tǒng)性能。
一個(gè)簡(jiǎn)單的例子:
#!/bin/perl
Print “Content-type : text/html\n\n”;
Print “I Love yuzi”;
這樣的程序,每一次都要啟動(dòng)一個(gè)進(jìn)程。
而使用了FCGI模塊以后:
use FCGI;
while(FCGI::accept() >=0 )
{
print "Content-type: text/html\n\n";
print "I Love yuzi”;
}
exit 0;
只有循環(huán)內(nèi)部每次執(zhí)行
而從cgi轉(zhuǎn)向fastcgi是很簡(jiǎn)單的,只要把啟動(dòng)部分放在while循環(huán)外面,其它部分在while循環(huán)里完成。但是應(yīng)當(dāng)注意的是,一般情況我們寫perl CGI程序的時(shí)候不注意資源的回收,讓程序結(jié)束的時(shí)候自動(dòng)回收,但在fastcgi環(huán)境下這就會(huì)產(chǎn)生問題,所以要養(yǎng)成use strict的習(xí)慣,用my $var定義變量。