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