成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Python web開(kāi)發(fā)你需要理解的一些服務(wù)器概念

BoYang / 1599人閱讀

摘要:是一個(gè)字典,包含了客戶(hù)端請(qǐng)求的信息,如請(qǐng)求的首部,方法等信息,可以認(rèn)為是請(qǐng)求上下文一個(gè)用于發(fā)送響應(yīng)狀態(tài)響應(yīng)頭的回調(diào)函數(shù)。

1.Python web開(kāi)發(fā)你需要理解的一些服務(wù)器概念

??前幾日在生產(chǎn)服務(wù)器上部署Python web.py的一個(gè)項(xiàng)目,發(fā)現(xiàn)自己對(duì)服務(wù)器的一些概念不是很明白,遂查資料看了一會(huì),特此做出個(gè)人的一些算是筆試的總結(jié)吧,以便之后可以回顧

2.WSGI

??全稱(chēng)是Web Server Gateway Interface,WSGI不是服務(wù)器,也不是API或者Python的什么模塊之類(lèi)的,它只是一種Python web的一種規(guī)范,類(lèi)似于Java web里面的servlet規(guī)范,WSGI規(guī)范定義了web應(yīng)用(web框架)與web服務(wù)器之間交互的接口,約定了WSGI server怎么去調(diào)用web應(yīng)用程序類(lèi)或者函數(shù),web應(yīng)用程序需要符合什么樣的規(guī)范。而下面說(shuō)的uWSGI就是一種支持WSGI規(guī)范的服務(wù)器,或者你可以將uWSGI理解為一種支持WSGI規(guī)范的容器,所以我們可以將web應(yīng)用部署到uWSGI中,然后當(dāng)它接受請(qǐng)求時(shí),就會(huì)按照WSGI定義的接口回調(diào)web應(yīng)用來(lái)處理請(qǐng)求。
??WSGI定義了兩種角色,分別為server端(或者gateway端)和application端(或者framework端),需要server端和application端都支持WSGI,一般而言server端是uWSGI,application端是一個(gè)可調(diào)用對(duì)象(callable object),可調(diào)用對(duì)象可以是類(lèi)、方法或者可調(diào)用的實(shí)例,這個(gè)對(duì)象接受兩個(gè)參數(shù)environ(請(qǐng)求的環(huán)境變量)和start_response(回調(diào)函數(shù))。

environ是一個(gè)字典,包含了客戶(hù)端請(qǐng)求的信息,如 HTTP 請(qǐng)求的首部,方法等信息,可以認(rèn)為是請(qǐng)求上下文

start_response一個(gè)用于發(fā)送HTTP響應(yīng)狀態(tài)(HTTP status )、響應(yīng)頭(HTTP headers)的回調(diào)函數(shù)。在返回內(nèi)容之前必須先調(diào)用這個(gè)回調(diào)函數(shù)

def simple_app(environ, start_response):
    """
    docstring, it"s just a test application
    """
    status = "200 OK"
    response_headers = [("Content-type", "text/html")]
    start_response(status, response_headers)
    return ["Hello World"]

??上面的回調(diào)函數(shù)的作用是讓W(xué)SGI server返回響應(yīng)的首部和HTTP狀態(tài)碼,這個(gè)函數(shù)必須有兩個(gè)參數(shù),第一個(gè)是狀態(tài)碼,第二個(gè)是響應(yīng)的首部元組組成的列表,并且回調(diào)函數(shù)設(shè)置狀態(tài)碼和首部需要在return響應(yīng)HTTP body之前執(zhí)行。
??值得一說(shuō)的是,return返回的響應(yīng)信息應(yīng)該是一個(gè)可迭代對(duì)象,上面的例子中將字符串放在了列表里面,如果直接返回字符串,會(huì)導(dǎo)致WSGI服務(wù)器對(duì)字符串進(jìn)行迭代而影響速度。

3 uWSGI

??是一個(gè)web服務(wù)器,實(shí)現(xiàn)了WSGI協(xié)議、uwsgi協(xié)議、http協(xié)議等

4 UWSGI

??一種規(guī)范,或者說(shuō)是一種通信協(xié)議,主要用在代理服務(wù)器(如Nginx)與uWSGI服務(wù)器之間的通信,而WSGI主要是用在uWSGI服務(wù)器和應(yīng)用程序之間的通信。

5 請(qǐng)求流程

首先nginx 是對(duì)外的服務(wù)接口,外部瀏覽器通過(guò)url訪(fǎng)問(wèn)nginx;

nginx 接收到瀏覽器發(fā)送過(guò)來(lái)的http請(qǐng)求,將包進(jìn)行解析,分析url,如果是靜態(tài)文件請(qǐng)求就直接訪(fǎng)問(wèn)用戶(hù)給nginx配置的靜態(tài)文件目錄,直接返回用戶(hù)請(qǐng)求的靜態(tài)文件。如果不是靜態(tài)文件,而是一個(gè)動(dòng)態(tài)的請(qǐng)求,那么nginx就將請(qǐng)求轉(zhuǎn)發(fā)給uWSGI,uWSGI接收到請(qǐng)求之后將包進(jìn)行處理,處理成WSGI可以接受的格式,根據(jù)請(qǐng)求調(diào)用應(yīng)用程序的某個(gè)文件,某個(gè)文件的某個(gè)函數(shù),最后處理完將返回值再次交給uWSGI,uWSGI將返回值進(jìn)行打包,打包成UWSGI能夠接收的格式,并轉(zhuǎn)發(fā)給nginx,nginx最終將返回值返回給瀏覽器.

6 小問(wèn)題

從上面可以看出,Nginx這一層并不是必須的,uWSGI服務(wù)器完全可以完成整個(gè)和瀏覽器的交互,但是需要考慮下面的情況

安全問(wèn)題,程序不能直接被瀏覽器訪(fǎng)問(wèn)到,而是通過(guò)nginx,nginx只開(kāi)放某個(gè)接口,uWSGI本身是內(nèi)網(wǎng)接口,這樣運(yùn)維人員在nginx上加上安全性的限制,可以達(dá)到保護(hù)程序的作用

負(fù)載均衡問(wèn)題,一個(gè)uWSGI很可能不夠用,即使開(kāi)了多個(gè)work也是不行,畢竟一臺(tái)機(jī)器的cpu和內(nèi)存都是有限的,有了nginx做代理,一個(gè)nginx可以代理多臺(tái)uWSGI完成uWSGI的負(fù)載均衡

靜態(tài)文件問(wèn)題,用django或是uWSGI這種東西來(lái)負(fù)責(zé)靜態(tài)文件的處理是很浪費(fèi)的行為,而且他們本身對(duì)文件的處理也不如nginx好,所以整個(gè)靜態(tài)文件的處理都直接由nginx完成,靜態(tài)文件的訪(fǎng)問(wèn)完全不去經(jīng)過(guò)uWSGI以及其后面的東西。

參考文章:
python nginx+uwsgi+WSGI 處理請(qǐng)求詳解
Nginx + uWSGI + Webpy配置&原理.md

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44543.html

相關(guān)文章

  • Python Web開(kāi)發(fā)》作者Harry Percival:TDD就是微小而漸進(jìn)改變

    摘要:目前就職于,他在各種演講研討會(huì)和開(kāi)發(fā)者大會(huì)上積極推廣測(cè)試驅(qū)動(dòng)開(kāi)發(fā)。問(wèn)很多敏捷教練都表示訓(xùn)練新人做測(cè)試驅(qū)動(dòng)開(kāi)發(fā)是一件辛苦而進(jìn)度緩慢的事,并且收益也不是很大。首先是開(kāi)發(fā)的對(duì)話(huà)式風(fēng)格。第一個(gè)問(wèn)題就是測(cè)試套件的速度。 Harry J.W. Percival目前就職于PythonAnywhere,他在各種演講、研討會(huì)和開(kāi)發(fā)者大會(huì)上積極推廣測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)。他在利物浦大學(xué)獲得計(jì)算機(jī)科學(xué)碩士學(xué)...

    Guakin_Huang 評(píng)論0 收藏0
  • Python Web開(kāi)發(fā)》作者Harry Percival:TDD就是微小而漸進(jìn)改變

    摘要:目前就職于,他在各種演講研討會(huì)和開(kāi)發(fā)者大會(huì)上積極推廣測(cè)試驅(qū)動(dòng)開(kāi)發(fā)。問(wèn)很多敏捷教練都表示訓(xùn)練新人做測(cè)試驅(qū)動(dòng)開(kāi)發(fā)是一件辛苦而進(jìn)度緩慢的事,并且收益也不是很大。首先是開(kāi)發(fā)的對(duì)話(huà)式風(fēng)格。第一個(gè)問(wèn)題就是測(cè)試套件的速度。 Harry J.W. Percival目前就職于PythonAnywhere,他在各種演講、研討會(huì)和開(kāi)發(fā)者大會(huì)上積極推廣測(cè)試驅(qū)動(dòng)開(kāi)發(fā)(TDD)。他在利物浦大學(xué)獲得計(jì)算機(jī)科學(xué)碩士學(xué)...

    k00baa 評(píng)論0 收藏0
  • [譯]學(xué)習(xí)Python編程19個(gè)資源

    摘要:它需要將近美元才能買(mǎi)到,但是你可以下載免費(fèi)的和版本。在需要花費(fèi)美元來(lái)開(kāi)始你的學(xué)習(xí),將會(huì)有超過(guò)頁(yè)的內(nèi)容和個(gè)多小時(shí)的視頻供你訪(fǎng)問(wèn),還包括以后可以免費(fèi)更新。 showImg(https://segmentfault.com/img/bVrJpw); 用Python編寫(xiě)代碼一點(diǎn)都不難,事實(shí)上它一直被贊譽(yù)為最容易學(xué)的編程語(yǔ)言。如果你準(zhǔn)備學(xué)習(xí)web開(kāi)發(fā), Python是一個(gè)不錯(cuò)的開(kāi)始,甚至想做游戲...

    xiguadada 評(píng)論0 收藏0
  • 軟件測(cè)試需要學(xué)什么?50W+測(cè)試工程師需要掌握哪些技能?

    摘要:協(xié)議學(xué)習(xí)常見(jiàn)請(qǐng)求方法學(xué)習(xí)和學(xué)習(xí)接口的基本概念接口文檔認(rèn)識(shí)接口測(cè)試用例編寫(xiě)接口測(cè)試工具使用軟件測(cè)試自動(dòng)化進(jìn)階性能測(cè)試性能測(cè)試的技術(shù)要求很高,不僅僅要對(duì)性能測(cè)試的指標(biāo)測(cè)試分類(lèi)測(cè)試設(shè)計(jì)有很深刻的理解。 ...

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

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

0條評(píng)論

閱讀需要支付1元查看
<