WSGI協議中包含兩個角色:服務器方和應用程序:web
服務器方:其調用應用程序,給應用程序提供(環境信息)和(回調函數), 這個回調函數是用來將應用程序設置的http header和status等信息傳遞給服務器方。服務器
應用程序:請求的統一入口,全部的請求都進入到這個app中來處理,這個app說白了就是一個函數(類中的call是同樣的道理)。用來生成返回的header,body和status,以便返回給服務器方。app
一個符合WSGI的「Hello World」應用程序以下所示:框架
def Application(environ, start_response): start_response('200 OK', [('Content-Type', 'text/plain')]) yield "Hello world!\n"
定義了一個名爲Application的應用程序,environ和startresponse,environ是一個字典包含了CGI中的環境變量,startresponse也是一個callable,接受兩個必須的參數,status(HTTP狀態)和responseheaders(響應消息的頭)。 第二行調用了startresponse,狀態指定爲「200 OK」,消息頭指定爲內容類型是「text/plain」 第三行將響應消息的消息體返回。函數
基於這種協議,實現服務器方和應用程序就能夠開發一個web框架。目前比較經常使用的web框架:Django、Flask、Tornado都是實現了基於WSGI協議進一步封裝的,把收、發請求響應的過程實現了,對於開發者來講只須要關注本身的業務實現便可。code