第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何理解nginx,wsgi,flask之間的關(guān)系?

如何理解nginx,wsgi,flask之間的關(guān)系?

千萬里不及你 2018-09-19 11:07:48
如何理解nginx,wsgi,flask之間的關(guān)系
查看完整描述

1 回答

?
拉風(fēng)的咖菲貓

TA貢獻1995條經(jīng)驗 獲得超2個贊

Web 服務(wù)器層
對于傳統(tǒng)的客戶端 - 服務(wù)器架構(gòu),客戶端向服務(wù)器發(fā)送請求,服務(wù)器接收請求,處理請求,最后給客戶端返回請求的響應(yīng),即簡單來說,一個服務(wù)器的作用是:
接收請求
處理請求
返回響應(yīng)
此文我們探討web服務(wù)器,常見的web服務(wù)器有Nginx,Apache等。在這個三層結(jié)構(gòu)中,web 服務(wù)器是最先接收到用戶的請求的。
Web框架層
常見的web框架有Flask,Django等,我們以Flask框架為例子,展示web框架的作用:
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
return 'Hello World!'

if __name__ == '__main__':
app.run()123456789

以上簡單的幾行代碼,就創(chuàng)建了一個web應(yīng)用程序對象app。
Web框架為我們提供路由管理,cookies管理等功能,讓我們只需要關(guān)心業(yè)務(wù)的邏輯,提高開發(fā)的效率。
WSGI層
WSGI不是服務(wù)器,也不是用于與程序交互的API,更新不真實的代碼,而只是一種接口。它只適用于Python語言,其全稱為Web Server Gateway Interface,定義了web服務(wù)器和web應(yīng)用之間的接口規(guī)范。也就是說,只要web服務(wù)器和web應(yīng)用都遵守WSGI協(xié)議,那么web服務(wù)器和web應(yīng)用就可以隨意的組合。
def application(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return [b"Hello World"]123

代碼中的env,start_response變量由web服務(wù)器傳入,其中,env是一個字典,包含了類似HTTP_HOST,HOST_USER_AGENT,SERVER_PROTOCO等環(huán)境變量。start_response則是方法,接受兩個參數(shù),分別是status,response_headers。application方法設(shè)置http響應(yīng)的狀態(tài)碼和Content-Type等頭部信息,并返回響應(yīng)具體結(jié)果。
上述代碼就是一個完整的WSGI應(yīng)用,當一個支持WSGI的web服務(wù)器(例如Nginx)接收到客戶端的請求后,便會調(diào)用這個application方法。WSGI層并不需要關(guān)心env,start_response這兩個變量是如何實現(xiàn)的,直接使用即可。
值得指出的是,WSGI是一種協(xié)議,需要區(qū)分幾個相近的名詞:
- uwsgi
同wsgi一樣也是一種協(xié)議,uWSGI服務(wù)器正是使用了uwsgi協(xié)議
- uWSGI
實現(xiàn)了uwsgi和WSGI兩種協(xié)議的web服務(wù)器。注意uWSGI本質(zhì)上也是一種web服務(wù)器,處于上面描述的三層結(jié)構(gòu)中的web服務(wù)器層。
- CGI
通用網(wǎng)關(guān)接口,并不限于python語言,定義了web服務(wù)器是如何向客戶端提供動態(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進程(類似Python解釋器)針對每個請求創(chuàng)建,用完就拋棄,效率低下。WSGI正是為了替代CGI而出現(xiàn)的。
說到這,我們基本理清了WSGI在web服務(wù)器與web框架之間作用:WSGI就像一條紐帶,將web服務(wù)器與web框架連接起來。回到本文的題目,Nginx屬于一種web服務(wù)器,F(xiàn)lask屬于一種web框架,因此,WSGI與Nginx、Flask的作用就不明而喻了。
最后以Nginx,WSGI,F(xiàn)lask之間的對話結(jié)束本文。
Nginx:Hey,WSGI,我剛收到了一個請求,我需要你作些準備,然后由Flask來處理這個請求。
WSGI:OK,Nginx。我會設(shè)置好環(huán)境變量,然后將這個請求傳遞給Flask處理。
Flask:Thanks WSGI!給我一些時間,我將會把請求的響應(yīng)返回給你。
WSGI:Alright,那我等你。
Flask:Okay,我完成了,這里是請求的響應(yīng)結(jié)果,請求把結(jié)果傳遞給Nginx。
WSGI:Good job!Nginx,這里是響應(yīng)結(jié)果,已經(jīng)按照要求給你傳遞回來了。
Nginx:Cool,我收到了,我把響應(yīng)結(jié)果返回給客戶端。大家合作愉快~

查看完整回答
反對 回復(fù) 2018-10-06
  • 1 回答
  • 0 關(guān)注
  • 1578 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號