WSGI
參考link:https://jingtyu.gitbooks.io/learning-openstack/content/351-usgi.html(本人的gitbook)
個人理解:
wsgi: Web服務器網關接口(Python Web Server Gateway Interface
,縮寫為WSGI
)CGI(common gateway unterface)
工作原理:
webob:WebOb是一個用於對WSGI request環境進行包裝(也就是變得易用)以及用於創建WSGI response的一個包。
特點:一是兼容性好,二是使用簡單。
pecan:Pecan專注於HTTP本身,提供object-dispatch方式路由的超輕量級的Python Web框架,沒有支持一些額外的功能,
比如session或是數據庫 。
wsme:(Web Service Made Easy)WSME會自動幫你檢查HTTP請求和響應中的數據是否符合預先設定好的要求。WSME的主要方式是通過裝飾器來控制controller方法的輸入和輸出。WSME中主要使用兩個控制器:
@signature: 這個裝飾器用來描述一個函數的輸入和輸出。
@wsexpose: 這個裝飾器包含@signature的功能,同時會把函數的路由信息暴露給Web框架,效果就像Pecan的expose裝飾器。
paste:Python paste是一個WSGI工具包,paste 是python的一個module,通過paste, 你可以把wsgi的模塊寫入ini風格的配置文
件,靈活部署。
routes:Rest即Representational State Transfer
,中文大家翻譯成表述性狀態轉移。在OpenStack中的API Daemon都會有一個Router類,來構建資源與URL直接的映射關系,完成從接收到URL請求然后映射到具體的函數上執行的整個過程。
CGI
鏈接: https://www.zhihu.com/question/19998865/answer/29395327
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
CGI是比較原始的開發動態網站的方式。你可以想象一下,一個網站的動態內容肯定是程序生成的,光是靜態的html頁面無法達到這個效果。那么,這個程序就需要接受客戶端的請求,然后進行相應處理,再返回給客戶端,客戶端和服務端的通信當然是通過HTTP協議。
然后我們會發現,這個程序在處理客戶端請求的時候,大部分時候會進行很多重復的工作,比如說HTTP請求的解析。也就是說,你的程序需要解析HTTP請求,我的程序也需要解析。
於是為了DRY原則,Web服務器誕生了。(以下所說的都是CGI的工作模式)
於是Web服務器可以解析這個HTTP請求,然后把這個請求的各種參數寫進進程的環境變量,比如
REQUEST_METHOD,PATH_INFO之類的。之后呢,服務器會調用相應的程序來處理這個請求,這個程序也就是我們所要寫的CGI程序了。它會負責生成動態內容,然后返回給服務器,再由服務器轉交給客戶端。服務器和CGI程序之間通信,一般是通過進程的環境變量和管道。
這樣做雖然很清晰,但缺點就是每次有請求,服務器都會fork and exec,每次都會有一個新的進程產生,開銷還是比較大的。
原因在與CGI程序是一個獨立的程序,它是可以獨立運行的(在提供HTTP請求的情況下),它可以用幾乎所有語言來寫,包括perl,c,lua,python等等。所以對於一個程序,服務器只能以fork and exec的方式來調用它了。
CGI,SWGI區別
作者:塗飛平
鏈接: https://www.zhihu.com/question/19998865/answer/27033737
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。