最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

全面了解Nginx, WSGI, Flask之間的關(guān)系

 更新時(shí)間:2018年01月09日 10:08:35   作者:haozlee  
下面小編就為大家分享一篇全面了解Nginx, WSGI, Flask之間的關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

概覽

之前對(duì) Nginx,WSGI(或者 uWSGI,uwsgi),F(xiàn)lask(或者 Django),這幾者的關(guān)系一存存在疑惑。通過(guò)查閱了些資料,總算把它們的關(guān)系理清了。

總括來(lái)說(shuō),客戶端從發(fā)送一個(gè) HTTP 請(qǐng)求到 Flask 處理請(qǐng)求,分別經(jīng)過(guò)了 web服務(wù)器層,WSGI層,web框架層,這三個(gè)層次。不同的層次其作用也不同,下面簡(jiǎn)要介紹各層的作用。

web服務(wù)器,web框架與WSGI的三層關(guān)系

圖1:web服務(wù)器,web框架與 WSGI 的三層關(guān)系

Web服務(wù)器層

對(duì)于傳統(tǒng)的客戶端 - 服務(wù)器架構(gòu),其請(qǐng)求的處理過(guò)程是,客戶端向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器接收請(qǐng)求并處理請(qǐng)求,然后給客戶端返回響應(yīng)。在這個(gè)過(guò)程中,服務(wù)器的作用是:

1 接收請(qǐng)求

2 處理請(qǐng)求

3 返回響應(yīng)

Web服務(wù)器是一類(lèi)特殊的服務(wù)器,其作用是主要是接收 HTTP 請(qǐng)求并返回響應(yīng)。提起 web服務(wù)器大家都不會(huì)陌生,常見(jiàn)的 web服務(wù)器有 Nginx,Apache,IIS等。在上圖1的三層結(jié)構(gòu)中,web服務(wù)器是最先接收用戶請(qǐng)求的,并將響應(yīng)結(jié)果返回給用戶。

Web框架層

Web框架的作用主要是方便我們開(kāi)發(fā) web應(yīng)用程序,HTTP請(qǐng)求的動(dòng)態(tài)數(shù)據(jù)就是由 web框架層來(lái)提供的。常見(jiàn)的 web框架有Flask,Django等,我們以 Flask 框架為例子,展示 web框架的作用:

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

以上簡(jiǎn)單的幾行代碼,就創(chuàng)建了一個(gè) web應(yīng)用程序?qū)ο?app。app 監(jiān)聽(tīng)機(jī)器所有 ip 的 8080 端口,接受用戶的請(qǐng)求連接。我們知道,HTTP 協(xié)議使用 URL 來(lái)定位資源,上面的程序會(huì)將路徑 /hello 的請(qǐng)求交由 hello_world 方法處理,hello_world 返回 ‘Hello World!' 字符串。對(duì)于 web框架的使用者來(lái)說(shuō),他們并不關(guān)心如何接收 HTTP 請(qǐng)求,也不關(guān)心如何將請(qǐng)求路由到具體方法處理并將響應(yīng)結(jié)果返回給用戶。Web框架的使用者在大部分情況下,只需要關(guān)心如何實(shí)現(xiàn)業(yè)務(wù)的邏輯即可。

WSGI層

WSGI 不是服務(wù)器,也不是用于與程序交互的API,更不是真實(shí)的代碼,WSGI 只是一種接口,它只適用于 Python 語(yǔ)言,其全稱(chēng)為 Web Server Gateway Interface,定義了 web服務(wù)器和 web應(yīng)用之間的接口規(guī)范。也就是說(shuō),只要 web服務(wù)器和 web應(yīng)用都遵守WSGI協(xié)議,那么 web服務(wù)器和 web應(yīng)用就可以隨意的組合。

下面的代碼展示了 web服務(wù)器是如何與 web應(yīng)用組合在一起的。

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

方法 application由 web服務(wù)器調(diào)用,參數(shù)env,start_response 由 web服務(wù)器實(shí)現(xiàn)并傳入。其中,env是一個(gè)字典,包含了類(lèi)似 HTTP_HOST,HOST_USER_AGENT,SERVER_PROTOCO 等環(huán)境變量。start_response則是一個(gè)方法,該方法接受兩個(gè)參數(shù),分別是status,response_headers。application方法的主要作用是,設(shè)置 http 響應(yīng)的狀態(tài)碼和 Content-Type 等頭部信息,并返回響應(yīng)的具體結(jié)果。

上述代碼就是一個(gè)完整的 WSGI 應(yīng)用,當(dāng)一個(gè)支持 WSGI 的 web服務(wù)器接收到客戶端的請(qǐng)求后,便會(huì)調(diào)用這個(gè) application 方法。WSGI 層并不需要關(guān)心env,start_response 這兩個(gè)變量是如何實(shí)現(xiàn)的,就像在 application 里面所做的,直接使用這兩個(gè)變量即可。

值得指出的是,WSGI 是一種協(xié)議,需要區(qū)分幾個(gè)相近的名詞:

uwsgi

同 wsgi 一樣也是一種協(xié)議,uWSGI服務(wù)器正是使用了 uwsgi 協(xié)議

uWSGI

實(shí)現(xiàn)了 uwsgi 和 WSGI 兩種協(xié)議的web服務(wù)器。注意 uWSGI 本質(zhì)上也是一種 web服務(wù)器,處于上面描述的三層結(jié)構(gòu)中的 web服務(wù)器層。

CGI

通用網(wǎng)關(guān)接口,并不限于 Python 語(yǔ)言,定義了 web服務(wù)器是如何向客戶端提供動(dòng)態(tài)的內(nèi)容。例如,規(guī)定了客戶端如何將參數(shù)傳遞給 web服務(wù)器,web服務(wù)器如何將參數(shù)傳遞給 web應(yīng)用,web應(yīng)用如何將它的輸出如何發(fā)送給客戶端,等等。

生產(chǎn)環(huán)境下的 web應(yīng)用都不使用 CGI 了,CGI進(jìn)程(類(lèi)似 Python 解釋器)針對(duì)每個(gè)請(qǐng)求創(chuàng)建,用完就拋棄,效率低下。WSGI 正是為了替代 CGI 而出現(xiàn)的。

說(shuō)到這,我們基本理清了 WSGI 在 web服務(wù)器與 web框架之間作用:WSGI 就像一條紐帶,將 web服務(wù)器與 web框架連接起來(lái)。回到本文的題目,Nginx 屬于一種 web服務(wù)器,F(xiàn)lask屬于一種 web框架,因此,WSGI 與 Nginx、Flask 的作用就不明而喻了。

最后以 Nginx,WSGI,F(xiàn)lask 之間的對(duì)話結(jié)束本文。

Nginx:Hey,WSGI,我剛收到了一個(gè)請(qǐng)求,我需要你作些準(zhǔn)備,然后由Flask來(lái)處理這個(gè)請(qǐng)求。

WSGI:OK,Nginx。我會(huì)設(shè)置好環(huán)境變量,然后將這個(gè)請(qǐng)求傳遞給Flask處理。

Flask:Thanks WSGI!給我一些時(shí)間,我將會(huì)把請(qǐng)求的響應(yīng)返回給你。

WSGI:Alright,那我等你。

Flask:Okay,我完成了,這里是請(qǐng)求的響應(yīng)結(jié)果,請(qǐng)求把結(jié)果傳遞給Nginx。

WSGI:Good job!Nginx,這里是響應(yīng)結(jié)果,已經(jīng)按照要求給你傳遞回來(lái)了。

Nginx:Cool,我收到了,我把響應(yīng)結(jié)果返回給客戶端。大家合作愉快~

以上這篇全面了解Nginx, WSGI, Flask之間的關(guān)系就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python中requests庫(kù)的基本概念與具體使用方法

    Python中requests庫(kù)的基本概念與具體使用方法

    requests庫(kù)是用python編寫(xiě)的基于urllib,requests唯一的一個(gè)非轉(zhuǎn)基因的Python HTTP庫(kù),下面這篇文章主要給大家介紹了關(guān)于Python中requests庫(kù)的基本概念與具體使用方法,需要的朋友可以參考下
    2022-08-08
  • 利用Python查看目錄中的文件示例詳解

    利用Python查看目錄中的文件示例詳解

    這篇文章主要給大家介紹了關(guān)于利用Python查看目錄中的文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • Python生成器常見(jiàn)問(wèn)題及解決方案

    Python生成器常見(jiàn)問(wèn)題及解決方案

    這篇文章主要介紹了Python生成器常見(jiàn)問(wèn)題及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 使用wxpy實(shí)現(xiàn)自動(dòng)發(fā)送微信消息功能

    使用wxpy實(shí)現(xiàn)自動(dòng)發(fā)送微信消息功能

    這篇文章主要介紹了使用wxpy實(shí)現(xiàn)自動(dòng)發(fā)送微信消息功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 把JSON數(shù)據(jù)格式轉(zhuǎn)換為Python的類(lèi)對(duì)象方法詳解(兩種方法)

    把JSON數(shù)據(jù)格式轉(zhuǎn)換為Python的類(lèi)對(duì)象方法詳解(兩種方法)

    本文通過(guò)兩種方法給大家介紹了把JSON數(shù)據(jù)格式轉(zhuǎn)換為Python的類(lèi)對(duì)象,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-06-06
  • ubuntu安裝sublime3并配置python3環(huán)境的方法

    ubuntu安裝sublime3并配置python3環(huán)境的方法

    這篇文章主要介紹了ubuntu安裝sublime3并配置python3環(huán)境的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • python使用在線API查詢IP對(duì)應(yīng)的地理位置信息實(shí)例

    python使用在線API查詢IP對(duì)應(yīng)的地理位置信息實(shí)例

    這篇文章主要介紹了python使用在線API查詢IP對(duì)應(yīng)的地理位置信息實(shí)例,需要的朋友可以參考下
    2014-06-06
  • Python3.13?+Pycharm?開(kāi)發(fā)環(huán)境配置

    Python3.13?+Pycharm?開(kāi)發(fā)環(huán)境配置

    本文全面解釋了如何配置Python3.13和PyCharm的開(kāi)發(fā)環(huán)境,適合初學(xué)者,詳細(xì)介紹了Python安裝步驟、選擇解釋器、常用快捷鍵和推薦插件,強(qiáng)調(diào)了虛擬環(huán)境的重要性,以及如何使用PyCharm進(jìn)行高效開(kāi)發(fā),感興趣的可以了解一下
    2024-11-11
  • Python爬蟲(chóng)實(shí)現(xiàn)驗(yàn)證碼登錄代碼實(shí)例

    Python爬蟲(chóng)實(shí)現(xiàn)驗(yàn)證碼登錄代碼實(shí)例

    這篇文章主要介紹了Python爬蟲(chóng)實(shí)現(xiàn)驗(yàn)證碼登錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 深入淺析Python2.x和3.x版本的主要區(qū)別

    深入淺析Python2.x和3.x版本的主要區(qū)別

    這篇文章主要介紹了Python2.x和3.x版本的主要區(qū)別,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11

最新評(píng)論

广德县| 福安市| 杭州市| 襄垣县| 武鸣县| 洞头县| 临武县| 大邑县| 健康| 灌云县| 栾川县| 瑞丽市| 于田县| 凤阳县| 梅州市| 宿州市| 宁城县| 集安市| 富蕴县| 鞍山市| 玉环县| 修水县| 正镶白旗| 肥乡县| 筠连县| 宣汉县| 临海市| 江孜县| 邓州市| 安平县| 城步| 白玉县| 大连市| 靖西县| 横峰县| 定边县| 双城市| 恩平市| 那曲县| 文安县| 庆安县|