CGI/FASTCGI/ISAPI區別

一 CGI原理及其性能

1) CGI概念
CGI即通用網關接口(Common Gateway Interface),它是一段程序,運行在服務器上,提供同客戶端HTML頁面的交互,通俗的講CGI就象是一座橋,把網頁和WEB服務器中的執行程序鏈接起來,它把HTML接收的指令傳遞給服務器的執行程序,再把服務器執行程序的結果返還給HTML頁。

2)CGI程序語言
事實上,任何一種程序語言,只要能在服務器主機上利用CGI接口來編寫應用程序,均可以叫做CGI程序語言。目前最爲流行的CGI程序語言有四種:C,Shell,Perl和VisualBasic,其它一些語言也有許多人在用,如TCL,Fortran及AppleScript等。

3)CGI程序的執行
CGI 程序通常是個可執行程序。編譯好的CGI程序通常要集中放在一個目錄下。具體存放的位置隨操做系統的不一樣而不一樣。CGI程序的執行通常有兩種調用方式:第一種是經過URL直接調用,如:「http://202.114.2.182/cgi-win /cgi.exe」,在瀏覽器的URL欄裏直接寫入上述描述就能夠調用該程序;另外一種方式,也是主要的方式,是經過交互式主頁裏的FORM欄調用,一般都是用戶在填完一張輸入信息Form後按確認按鈕啓動CGI程序。

4)CGI工做的主要流程
CGI工做的主要流程是:1.一個用戶請求激活一個CGI應用程序;2.CGI應用程序將交互主頁裏用戶輸入信息提取出來;3.將用戶輸入的信息傳給服務器主機應用程序(如數據庫查詢〕;4.將服務器處理結果經過HTML文件返回給用戶;5.CGI進程結束。

5)CGI的性能評價
CGI 的跨平臺性能極佳,幾乎能夠在任何操做系統上實現,如DOS、WINDOWS、UNIX、OS/二、Macintosh等。實現CGI的編程語言也有不少選擇。CGI的應用程序通常都是一個獨立的可執行程序,和WWW服務器各自佔據着不一樣的進程,並且通常一個CGI程序只能處理一個用戶請求。這樣,每有一個用戶請求,都會激活一個CGI進程,當用戶請求數量很是多時,會大量擠佔系統的資源如內存,CPU時間等,形成效能低下。


二 ISAPI原理及其性能

1)ISAPI概念
ISAPI即Internet Server Application Program Interface,是微軟提供的一套面向Internet服務的API接口,它能實現CGI能提供的所有功能,並在此基礎上進行了擴展,如提供了過濾器應用程序接口。ISAPI 服務器擴展是能夠被 HTTP 服務器加載和調用的 DLL。Internet 服務器擴展也稱爲 Internet 服務器應用程序 (ISA),用於加強符合 Internet 服務器 API (ISAPI) 的服務器的功能。ISA 經過瀏覽器應用程序調用,而且將類似的功能提供給通用網關接口 (CGI) 應用程序。

2)ISAPI程序語言
因爲開發ISAPI應用要用到微軟的一套API,因此能用來開發ISAPI應用的語言不如CGI那麼多。主要有VisualC++4.1以上版本,VisualBasic5.0、BorlandC++5.0也能夠。

3)ISAPI原理
ISAPI 的工做原理和CGI大致上是相同的,都是經過交互式主頁取得用戶輸入信息,而後交服務器後臺處理。可是兩者在實現機制上大相庭徑。ISAPI與CGI最大的區別在於:不一樣於CGI,在ISAPI下創建的應用程序是以動態鏈接庫的形式存在;而CGI的應用程序通常都是可執行程序。

4)ISAPI程序的執行
ISAPI 應用的工做流程與CGI有一些不一樣。ISAPI應用的DLL不只能夠象CGI程序同樣被用戶請求激活,還能夠被系統預先激活來監視用戶輸入;對於被用戶激活的DLL,在處理完一個用戶請求後不會立刻消失,而是繼續駐留在內存中等待處理別的用戶輸入,直到過了一段時間後一直沒有用戶輸入。

5)5ISAPI性能評價
一個ISAPI的DLL,能夠在被用戶請求激活後長駐內存,等待用戶的另外一個請求,還能夠在一個DLL裏設置多個用戶請求處理函數,此外,ISAPI的DLL應用程序和WWW服務器處於同一個進程中,效率要顯著高於CGI。不過ISAPI的平臺兼容性較差,目前只能用於微軟本身的Windows95和NT操做系統上,服務器平臺也僅限於 IIS(InternetInformationServer)和MSpersonalwebserver以及NTworkstation上的 peerwebserver。
6)ISAPI 篩選器是什麼?
ISAPI 篩選器是在啓用 ISAPI 的 HTTP 服務器上運行的 DLL,用以篩選與服務器之間來回傳送的數據。該篩選器註冊事件的通知,例如登陸或 URL 映射。當發生選定事件時,篩選器被調用,而且您能夠監視及更改數據(在數據從服務器傳輸到客戶端或相反的過程當中)。可使用 ISAPI 篩選器提供加強的 HTTP 請求記錄(例如,跟蹤登陸到服務器的用戶)、自定義加密、自定義壓縮或其餘身份驗證方法。
7)ISAPI 服務器擴展和篩選器之間的區別是什麼?
服務器擴展:在 URL 中引用時運行。被顯式調用,例如用 http://myserver/myprog.dll?。被用戶第一次調用時根據請求加載。
篩選器:爲服務器處理的每一個 URL 調用。若是發生已註冊事件,自動爲任何發送到服務器的 URL 運行。服務因其註冊表項而啓動時加載。     
     
服務器擴展和篩選器都:* 共享服務的處理空間。* 必須是線程安全的。* 一經加載便保留在內存中(直到服務中止或者內存被其餘進程所須要)。


三 ISAPI與CGI有哪些相同和不一樣之處?

ISAPI 服務器擴展爲使用 Internet 服務器的通用網關接口 (CGI) 應用程序提供了另外一種選擇。與 CGI 應用程序不一樣,ISAPI 在 HTTP 服務器所在的同一地址空間運行,而且能夠訪問可由 HTTP 服務器使用的全部資源。ISA 的系統開銷比 CGI 應用程序低,由於它們不要求建立其餘進程,也不執行須要越過進程邊界的通訊,而這種通訊很是耗時。若是內存被其餘進程所須要,擴展和篩選器 DLL 均可能被卸載。

Internet客戶端經過HTTP服務器調用ISAPI的方法與調用CGI應用程序的方法同樣。例如,客戶端能夠這樣調用一個 CGI 應用程序:http://sample、example.exe?Param1&Param2,它能夠這樣調用一個執行相同功能的 ISAPI:http://sample/example.dll?Param1&Param2。ISAPI 容許在一個DLL中有多個命令,這些命令做爲DLL中CHttpServer 對象的成員函數來實現。CGI要求每一個任務有一個單獨的名稱和一個到單獨的可執行文件的URL映射。每一個新的CGI請求啓動一個新進程,而每一個不一樣的請求包含在各自的可執行文件中,這些文件根據每一個請求加載和卸載,所以系統開銷高於ISA。

ISAPI 篩選器沒有等效的 CGI 篩選器。篩選器提供預處理和後處理在客戶端和服務器之間發送的全部數據的能力。
FastCGI
         1. FastCGI 像是一個常駐 (long-live) 型的 CGI,它能夠一直執行着,只要激活後,不會每次都要花費時間去 fork 一次 (這是 CGI 最爲人詬病的 fork-and-execute 模式)。
  2. FastCGI 可在任何平臺上使用,Netscape Enterprise 及 IIS 都有 FastCGI 的模塊可供使用,阿帕契 (Apache,以及利用 Apache 衍生出作的服務器) 上也有 mod_fastcgi 可用。
  3. FastCGI 支持 C/C++,Ruby, Perl,Tcl,Java,Python 等程序語言。
  4. FastCGI 的應用程序亦兼容於 CGI。即 FastCGI 的應用程序也能夠當成 CGI 來執行。
  5. 現有的 CGI 程序要改寫成 FastCGI 很是簡單,最少可能只須要多加入三行程序代碼。
  6. FastCGI 的偵錯方式與 CGI 大同小異,只要帶入程序所需的環境變量及參數,便可在命令列模式執行或偵錯。
  7. FastCGI 應用程序的寫做方式與 CGI 相似,除了幾項原則要特別注意外,FastCGI 的寫做方式跟 CGI 幾乎同樣,與學習 Web Server API 比較起來, FastCGI 簡單多了。
  8. FastCGI 支授分佈式運算 (distributed computing),即 FastCGI 程序能夠在網站服務器之外的主機上執行而且接受來自其它網站服務器來的請求。
PHP的FastCGI使你的全部php應用軟件經過mod_fastci運行,而不是mod_phpsusexec。FastCGI應用速度很快 是由於他們持久穩定。沒必要對每個請求都啓動和初始化。這使得應用程序的開發成爲可能,不然在CGI範例是不切實際的(例如一個大型的腳本,或者一個須要 鏈接單個或多個數據庫的應用)。
好處
  1. PHP腳本運行速度更快(3到30倍)。PHP解釋程序被載入內存而不用每次須要時從存儲器讀取,極大的提高了依靠腳本運行的站點的性能。
  2. 須要使用更少的系統資源。因爲服務器不用每次須要時都載入PHP解釋程序,你能夠將站點的傳輸速度提高很高而沒必要增長cpu負擔。
  3. 不須要對現有的代碼做任何改變。現有的一切都適用於PHP的FastCGI
潛在問題
      • 對全部的子目錄(/home/USERNAME/public_html/php.ini)你只有一個可用的php.ini文件。 這是優化網站代碼所必需的。若是你須要多個php.ini文件以適應不一樣的腳本須要,你能夠在任何子目錄禁用PHP的快速CGI,而其他的地方則繼續有 效。若是你須要這樣作請聯繫support。
      • 你對PHP環境作的任何升級(如php.ini文件的改變)都有幾分鐘的延遲。這是由於爲了更快的速度 你的php.ini文件已經被載入內存,而不是每次須要時再從存儲器從新讀取。
相關文章
相關標籤/搜索