国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

全面了解Nginx, WSGI, Flask之間的關系

2020-02-16 11:32:08
字體:
來源:轉載
供稿:網友

概覽

之前對 Nginx,WSGI(或者 uWSGI,uwsgi),Flask(或者 Django),這幾者的關系一存存在疑惑。通過查閱了些資料,總算把它們的關系理清了。

總括來說,客戶端從發送一個 HTTP 請求到 Flask 處理請求,分別經過了 web服務器層,WSGI層,web框架層,這三個層次。不同的層次其作用也不同,下面簡要介紹各層的作用。

web服務器,web框架與WSGI的三層關系

圖1:web服務器,web框架與 WSGI 的三層關系

Web服務器層

對于傳統的客戶端 - 服務器架構,其請求的處理過程是,客戶端向服務器發送請求,服務器接收請求并處理請求,然后給客戶端返回響應。在這個過程中,服務器的作用是:

1 接收請求

2 處理請求

3 返回響應

Web服務器是一類特殊的服務器,其作用是主要是接收 HTTP 請求并返回響應。提起 web服務器大家都不會陌生,常見的 web服務器有 Nginx,Apache,IIS等。在上圖1的三層結構中,web服務器是最先接收用戶請求的,并將響應結果返回給用戶。

Web框架層

Web框架的作用主要是方便我們開發 web應用程序,HTTP請求的動態數據就是由 web框架層來提供的。常見的 web框架有Flask,Django等,我們以 Flask 框架為例子,展示 web框架的作用:

from flask import Flaskapp = Flask(__name__)@app.route('/hello')def hello_world(): return 'Hello World!'if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)

以上簡單的幾行代碼,就創建了一個 web應用程序對象 app。app 監聽機器所有 ip 的 8080 端口,接受用戶的請求連接。我們知道,HTTP 協議使用 URL 來定位資源,上面的程序會將路徑 /hello 的請求交由 hello_world 方法處理,hello_world 返回 ‘Hello World!' 字符串。對于 web框架的使用者來說,他們并不關心如何接收 HTTP 請求,也不關心如何將請求路由到具體方法處理并將響應結果返回給用戶。Web框架的使用者在大部分情況下,只需要關心如何實現業務的邏輯即可。

WSGI層

WSGI 不是服務器,也不是用于與程序交互的API,更不是真實的代碼,WSGI 只是一種接口,它只適用于 Python 語言,其全稱為 Web Server Gateway Interface,定義了 web服務器和 web應用之間的接口規范。也就是說,只要 web服務器和 web應用都遵守WSGI協議,那么 web服務器和 web應用就可以隨意的組合。

下面的代碼展示了 web服務器是如何與 web應用組合在一起的。

def application(env, start_response):start_response('200 OK', [('Content-Type', 'text/html')])return [b"Hello World"]

方法 application由 web服務器調用,參數env,start_response 由 web服務器實現并傳入。其中,env是一個字典,包含了類似 HTTP_HOST,HOST_USER_AGENT,SERVER_PROTOCO 等環境變量。start_response則是一個方法,該方法接受兩個參數,分別是status,response_headers。application方法的主要作用是,設置 http 響應的狀態碼和 Content-Type 等頭部信息,并返回響應的具體結果。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太康县| 陆良县| 长顺县| 岗巴县| 邳州市| 稷山县| 泊头市| 金昌市| 时尚| 南召县| 毕节市| 衢州市| 繁峙县| 武山县| 都匀市| 隆昌县| 福贡县| 丘北县| 桑植县| 乐清市| 屯门区| 富源县| 抚州市| 本溪市| 株洲县| 太和县| 峨山| 湖南省| 西宁市| 上思县| 安宁市| 河津市| 霸州市| 凤冈县| 南丰县| 沾益县| 开远市| 台江县| 醴陵市| 德庆县| 蒲江县|