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