国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Hello, WSGI

array_huang / 1580人閱讀

摘要:最新的工作中,有一部分的任務(wù),于是開始折騰先惡補(bǔ)理論吧,關(guān)于有篇需要看,和,前者是年的提案,后者在年對(duì)前者做了小幅修訂,提案狀態(tài)也已經(jīng)是,所以已經(jīng)不是提案,已經(jīng)是協(xié)議規(guī)范了,是的縮寫,解決的是各種比如與各種框架比如之間互聯(lián)互通的兼容性問題如

最新的工作中,有一部分HTTP API的任務(wù),于是開始折騰Python WSGI...

WSGI

先惡補(bǔ)理論吧,關(guān)于Python WSGI有2篇PEP需要看,PEP 0333和PEP 3333,前者是2003年的提案,后者在2010年對(duì)前者做了小幅修訂,提案狀態(tài)也已經(jīng)是“Final”,所以已經(jīng)不是“提案”,已經(jīng)是協(xié)議規(guī)范了;

WSGI,是“Python Web Server Gateway Interface”的縮寫,解決的是各種Web Server(比如Apache、Nginx)與各種Python Web框架(比如Flask、Tornado)之間互聯(lián)互通的兼容性問題;

如PEP中描述,在沒有一個(gè)統(tǒng)一協(xié)議規(guī)范以前,某個(gè)Python應(yīng)用(Web框架、或者應(yīng)用程序),可能僅支持運(yùn)行在某一個(gè)Web Server下,應(yīng)用開發(fā)者選擇某個(gè)Web框架的同時(shí),也就綁死了某個(gè)Web Server;另外,在某個(gè)Web框架寫的應(yīng)用代碼,遷移到另外一個(gè)Web框架,不一定能跑起來;所以,為了能讓用戶自由選擇、組合使用任意的Web框架和Web Server,該P(yáng)EP規(guī)范了必要的交互方式和數(shù)據(jù)結(jié)構(gòu);

注意,WSGI不是一個(gè)軟件工具,它是一種協(xié)議規(guī)范的描述,它規(guī)范了“交互方式和數(shù)據(jù)結(jié)構(gòu)”,任何Web Server、Gateway和Framework、Application,只要遵從這個(gè)規(guī)范去實(shí)現(xiàn),就一定能互聯(lián)互通;既然是“交互”,就一定至少包含兩方吧,PEP指出:

the "server" or "gateway" side(下文稱為“server端”)

the "application" or "framework" side(下文稱為“application端”,framework本質(zhì)上也是一種應(yīng)用)

“application端”,必須提供一個(gè)“可調(diào)用的對(duì)象”供“server端”調(diào)用,“可調(diào)用的對(duì)象”一般是個(gè)入口函數(shù),應(yīng)用對(duì)HTTP請(qǐng)求的處理,要在這個(gè)入口函數(shù)內(nèi)完成,函數(shù)最終返回HTTP Respone,比如生成的HTML;

下面的示例摘自PEP 3333:

pythonHELLO_WORLD = b"Hello world!
"

def simple_app(environ, start_response):
    """Simplest possible application object"""
    status = "200 OK"
    response_headers = [("Content-type", "text/plain")]
    start_response(status, response_headers)
    return [HELLO_WORLD]

“server端”,一般就是Web Server啦,最主要的任務(wù)就是接受到HTTP請(qǐng)求后,調(diào)用“application端提供的入口函數(shù)(比如上面的“simple_app”),另外應(yīng)用程序里可能需要很多HTTP請(qǐng)求的信息(比如HTTP Method,GET/POST),這些信息,如何獲取呢?需要“server端”在調(diào)用應(yīng)用入口函數(shù)的時(shí)候作為函數(shù)參數(shù)傳遞,就是上面的“environ”,關(guān)于“environ”這個(gè)數(shù)據(jù)結(jié)構(gòu)的規(guī)范,PEP中也是有詳細(xì)描述的;

關(guān)于“server端”實(shí)現(xiàn)的實(shí)例代碼,稍稍復(fù)雜一點(diǎn),搬運(yùn)到這里,也不見得幫助理解,自行到PEP 3333查閱吧;

關(guān)于Python WSGI的理論介紹,最核心的都在這兒了,更細(xì)節(jié)的協(xié)議介紹,自行查閱吧;

Quick Start

好了,終于可以動(dòng)手實(shí)踐了,早已按耐不住啦!我們先把上面的“simple_app”跑起來吧;

bash$ touch simple_app.py
$ vim simple_app.py

HELLO_WORLD = b"Hello world!
"

def application(environ, start_response):
    """Simplest possible application object"""
    status = "200 OK"
    response_headers = [("Content-type", "text/plain")]
    start_response(status, response_headers)
    return [HELLO_WORLD]

好了,“application端”已經(jīng)好了,那“server端”呢?我們需要搞來一個(gè)實(shí)現(xiàn)了Python WSGI的Web Server,這里,我選擇了,uWSGI,不要被它的名字迷惑,它其實(shí)是一個(gè)功能非常全、實(shí)現(xiàn)了各種協(xié)議、支持各種的語言的“a full stack for building hosting services”,因?yàn)樽钤缰С諴ython,所以取了這樣一個(gè)名字,官方都說,名字已經(jīng)支撐不起它的野心,哈哈;

本實(shí)踐中,我們要基于Python安裝uWSGI:

bash$ pip install uwsgi

根據(jù)你的Python安裝路徑,uWSGI的二進(jìn)制程序安裝路徑也會(huì)不同,比我電腦上:

bash$ ls /usr/local/python2.7/bin/uwsgi

現(xiàn)在,“application端”和“server端”,都已經(jīng)準(zhǔn)備就緒了,我們可以啟動(dòng)的這個(gè)簡(jiǎn)單的WSGI應(yīng)用了:

bashuwsgi --http :9090 --wsgi-file simple_app.py

uWSGI會(huì)到simple_app.py文件中,找一個(gè)固定名字“application”的入口函數(shù),當(dāng)uWSGI收到HTTP請(qǐng)求時(shí),就會(huì)調(diào)用該入口函數(shù);

你在瀏覽器請(qǐng)求http://127.0.0.1:9090,應(yīng)該會(huì)看到uWSGI的輸出:

bash$ uwsgi --http :9090 --wsgi-file simple_app.py

[pid: 1492|app: 0|req: 1/1] 127.0.0.1 () {34 vars in 626 bytes} [Sat Jun 20 15:32:14 2015] GET / => generated 11 bytes in 0 msecs (HTTP/1.1 200) 1 headers in 44 bytes (1 switches on core 0)
[pid: 1492|app: 0|req: 2/2] 127.0.0.1 () {36 vars in 615 bytes} [Sat Jun 20 15:32:14 2015] GET /favicon.ico => generated 11 bytes in 0 msecs (HTTP/1.1 200) 1 headers in 44 bytes (1 switches on core 0)

此時(shí),你的瀏覽器應(yīng)該也已經(jīng)有“Hello World”頁面輸出,大功告成!

Learn More

本文的“Hello World”示例,僅僅是展示Python WSGI的框架結(jié)構(gòu),“server端”提供的HTTP請(qǐng)求信息“environ”完全沒有使用,無腦返回一個(gè)不變的字符串;

真正的應(yīng)用,是需要根據(jù)功能要求,定制、填充那個(gè)application的入口函數(shù)的,應(yīng)用開發(fā)者,可以自己代碼實(shí)現(xiàn),也可以依托于一些流行的WSGI框架和Python模塊,比如:Flask框架、werkzeug

“server端”就沒有什么發(fā)揮的空間了,選擇一個(gè)支持WSGI協(xié)議的就好了,就像本文嘗試的uWSGI,除非你想自己實(shí)現(xiàn)個(gè)Web Server;Nginx雖然不直接支持WSGI,但它支持uWSGI,這樣把Nginx擋在uWSGI前面,uWSGI就可以專門處理動(dòng)態(tài)的WSGI請(qǐng)求了,形成的架構(gòu),非常類似于PHP場(chǎng)景下的Nginx+PHP-FPM;

這些方面的知識(shí),也許會(huì)有后續(xù)的文章做介紹;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/45372.html

相關(guān)文章

  • 如何理解Nginx, WSGI, Flask之間的關(guān)系

    摘要:通過查閱了些資料,總算把它們的關(guān)系理清了。在這個(gè)過程中,服務(wù)器的作用是接收請(qǐng)求處理請(qǐng)求返回響應(yīng)服務(wù)器是一類特殊的服務(wù)器,其作用是主要是接收請(qǐng)求并返回響應(yīng)。正是為了替代而出現(xiàn)的。三結(jié)語最后以,,之間的對(duì)話結(jié)束本文。 剛轉(zhuǎn)行互聯(lián)網(wǎng)行業(yè),聽到了許多名詞:Flask、Django、WSGI、 Nginx、Apache等等,一直無法搞清楚這些開源項(xiàng)目之間的關(guān)系,直至看到這篇文章后感覺醍醐灌頂,以...

    魏明 評(píng)論0 收藏0
  • web.py源碼分析: application(1)

    摘要:本文主要分析的是庫的這個(gè)模塊中的代碼。將結(jié)果轉(zhuǎn)換成一個(gè)迭代器。函數(shù)函數(shù)的定義如下位置位置位置該函數(shù)的參數(shù)中就是,是路由映射表則是,是本次請(qǐng)求路徑。位置,如果是其他情況,比如直接指定一個(gè)類對(duì)象作為處理對(duì)象。 本文主要分析的是web.py庫的application.py這個(gè)模塊中的代碼。總的來說,這個(gè)模塊主要實(shí)現(xiàn)了WSGI兼容的接口,以便應(yīng)用程序能夠被WSGI應(yīng)用服務(wù)器調(diào)用。WSGI是We...

    edgardeng 評(píng)論0 收藏0
  • WSGI規(guī)范筆記

    摘要:概述接口包含兩方面及。另外在和之間還可能有一種稱作的中間件。接收的返回值作為響應(yīng)體。假設(shè)一個(gè)符合標(biāo)準(zhǔn)的可調(diào)用對(duì)象,它接受可調(diào)用對(duì)象作為參數(shù),返回一個(gè)可調(diào)用對(duì)象的對(duì)象。這樣的可調(diào)用對(duì)象稱為。的概念非常接近。 概述 WSGI接口包含兩方面:server/gateway 及 application/framework。 server調(diào)用由application提供的可調(diào)用對(duì)象。 另外在se...

    wh469012917 評(píng)論0 收藏0
  • Werkzeug 與 WSGI 介紹

    摘要:在介紹之前,先介紹一下,它為語言定義的服務(wù)器和應(yīng)用程序或框架之間的一種簡(jiǎn)單而通用的接口。這個(gè)函數(shù)接受兩個(gè)參數(shù),分別是和。響應(yīng)對(duì)象是一個(gè)應(yīng)用,提供了更好的方法來創(chuàng)建響應(yīng)。這部分解釋來源于官方文檔的中文版。 Werkzeug 是一個(gè)WSGI工具包,也可以作為一個(gè)Web框架的底層庫。 WSGI 在介紹Werkzeug之前,先介紹一下 WSGI(Python Web Server Gate...

    mengera88 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<