諸如nginx Apache這些web伺服器致力於靜態檔案的的傳輸,一些資料需要計算才能獲知,計算的程式都在web伺服器背後,所以這時web伺服器也扮演了反向 Proxy伺服器的角色。
既然web伺服器和後台計算程式分作兩個進程,進程之間的通訊必然要遵從一個協議,這個協議就是通用網關協議。
CGI = Common Gateway Interface
CGI方式在對於每個HTTP請求,Web宿主服務程式都建立新的進程以調用伺服器指令碼,相應該請求,處理完後結束這個子進程。這就是fork-and-execute模式。所以用cgi方式的伺服器有多少串連請求就會有多少cgi子進程,子進程反覆載入是cgi效能低下的主要原因。當使用者請求數量非常多時,會大量擠占系統的資源如記憶體,CPU時間等,造成效能低下。
FCGI = Fast CGI
它其實是CGI在具體實現中的的一個變種。FCGI在規範上跟CGI並沒有不同,通過減少CGI代理程式和Web宿主服務程式的通訊開銷。FCGI建立一個獨立的FCGI服務程式進程,和Web宿主服務程式進程通訊,FCGI服務進程被一旦啟動後,自己分配資源、建立線程響應HTTP請求、並決定自身生命週期,從而大大降低了系統為了建立進程而做出的資源開銷。現代流行的Web伺服器程式,如PHP、ASP.Net,基本都是FCGI的實現。他還是支援分布式的運算,即FastCGI程式可以在網站伺服器以外的主機上執行並且接受來自其他網站伺服器來的請求。
FastCGI比GI的特點就是後面的計算程式從web服務進程中獨立出來,可以常駐記憶體,可以分布式部署。
SCGI = Simple CGI
它是FCGI在精簡資料協議和響應過程後的產物。其設計目的是為了適應越來越多基於AJAX或REST的HTTP請求,而做出更快更簡潔的應答。並且SCGI約定,當伺服器返回對一個HTTP協議請求響應後,立刻關閉該HTTP串連。所以不難看出,SCGI更加適合於普遍意義上SOA所提倡的“請求-忘記”這種通訊模式。
WSGI = Web Server Gateway Interface
當Web Server收到一個請求後,可以通過Socket把環境變數和一個Callback回呼函數傳給後端Web應用,Web應用在完成頁面組裝後通過Callback把內容返回給Web Server。這樣做的優點有很多:
- 非同步化,通過Callback將Web請求的工作拆解開,可以很方便的在一個線程空間裡同時處理多個Web請求。
- 方便進行各種負載平衡和請求轉寄,不會造成後端Web應用阻塞。
此協議是Python語言的專利,它定義了一組在Web服務宿主程式和HTTP響應代理程式之間通訊的普遍適用的介面。它的產生是因為Python程式員注意到,對於Web架構和Web宿主伺服器程式間,有嚴重的耦合性,比如說,某些架構是針對Apache的mod_python設計的。於是,WSGI就定義了一套非常低層級的介面。常見的Python Web架構都實現了這個協議:如 CherryPy, Django, web.py, web2py, TurboGears, Tornado, Pylons, BlueBream, Google App Engine[dubious – discuss], Trac, Flask, Pyramid,等等.
以上就介紹了cgi fastcgi wsgi,包括了fastcgi方面的內容,希望對PHP教程有興趣的朋友有所協助。