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

資訊專欄INFORMATION COLUMN

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

BoYang / 1597人閱讀

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

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

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

2.WSGI

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

environ是一個(gè)字典,包含了客戶端請(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í)行。
??值得一說的是,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ī)范,或者說是一種通信協(xié)議,主要用在代理服務(wù)器(如Nginx)與uWSGI服務(wù)器之間的通信,而WSGI主要是用在uWSGI服務(wù)器和應(yīng)用程序之間的通信。

5 請(qǐng)求流程

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

nginx 接收到瀏覽器發(fā)送過來的http請(qǐng)求,將包進(jìn)行解析,分析url,如果是靜態(tài)文件請(qǐng)求就直接訪問用戶給nginx配置的靜態(tài)文件目錄,直接返回用戶請(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 小問題

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

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

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

靜態(tài)文件問題,用django或是uWSGI這種東西來負(fù)責(zé)靜態(tài)文件的處理是很浪費(fèi)的行為,而且他們本身對(duì)文件的處理也不如nginx好,所以整個(gè)靜態(tài)文件的處理都直接由nginx完成,靜態(tài)文件的訪問完全不去經(jīng)過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://m.specialneedsforspecialkids.com/yun/44543.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

0條評(píng)論

閱讀需要支付1元查看
<