摘要:是一個字典,包含了客戶端請求的信息,如請求的首部,方法等信息,可以認為是請求上下文一個用于發(fā)送響應狀態(tài)響應頭的回調(diào)函數(shù)。
1.Python web開發(fā)你需要理解的一些服務器概念
??前幾日在生產(chǎn)服務器上部署Python web.py的一個項目,發(fā)現(xiàn)自己對服務器的一些概念不是很明白,遂查資料看了一會,特此做出個人的一些算是筆試的總結(jié)吧,以便之后可以回顧
2.WSGI??全稱是Web Server Gateway Interface,WSGI不是服務器,也不是API或者Python的什么模塊之類的,它只是一種Python web的一種規(guī)范,類似于Java web里面的servlet規(guī)范,WSGI規(guī)范定義了web應用(web框架)與web服務器之間交互的接口,約定了WSGI server怎么去調(diào)用web應用程序類或者函數(shù),web應用程序需要符合什么樣的規(guī)范。而下面說的uWSGI就是一種支持WSGI規(guī)范的服務器,或者你可以將uWSGI理解為一種支持WSGI規(guī)范的容器,所以我們可以將web應用部署到uWSGI中,然后當它接受請求時,就會按照WSGI定義的接口回調(diào)web應用來處理請求。
??WSGI定義了兩種角色,分別為server端(或者gateway端)和application端(或者framework端),需要server端和application端都支持WSGI,一般而言server端是uWSGI,application端是一個可調(diào)用對象(callable object),可調(diào)用對象可以是類、方法或者可調(diào)用的實例,這個對象接受兩個參數(shù)environ(請求的環(huán)境變量)和start_response(回調(diào)函數(shù))。
environ是一個字典,包含了客戶端請求的信息,如 HTTP 請求的首部,方法等信息,可以認為是請求上下文
start_response一個用于發(fā)送HTTP響應狀態(tài)(HTTP status )、響應頭(HTTP headers)的回調(diào)函數(shù)。在返回內(nèi)容之前必須先調(diào)用這個回調(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ù)的作用是讓WSGI server返回響應的首部和HTTP狀態(tài)碼,這個函數(shù)必須有兩個參數(shù),第一個是狀態(tài)碼,第二個是響應的首部元組組成的列表,并且回調(diào)函數(shù)設置狀態(tài)碼和首部需要在return響應HTTP body之前執(zhí)行。
??值得一說的是,return返回的響應信息應該是一個可迭代對象,上面的例子中將字符串放在了列表里面,如果直接返回字符串,會導致WSGI服務器對字符串進行迭代而影響速度。
??是一個web服務器,實現(xiàn)了WSGI協(xié)議、uwsgi協(xié)議、http協(xié)議等
4 UWSGI??一種規(guī)范,或者說是一種通信協(xié)議,主要用在代理服務器(如Nginx)與uWSGI服務器之間的通信,而WSGI主要是用在uWSGI服務器和應用程序之間的通信。
5 請求流程首先nginx 是對外的服務接口,外部瀏覽器通過url訪問nginx;
nginx 接收到瀏覽器發(fā)送過來的http請求,將包進行解析,分析url,如果是靜態(tài)文件請求就直接訪問用戶給nginx配置的靜態(tài)文件目錄,直接返回用戶請求的靜態(tài)文件。如果不是靜態(tài)文件,而是一個動態(tài)的請求,那么nginx就將請求轉(zhuǎn)發(fā)給uWSGI,uWSGI接收到請求之后將包進行處理,處理成WSGI可以接受的格式,根據(jù)請求調(diào)用應用程序的某個文件,某個文件的某個函數(shù),最后處理完將返回值再次交給uWSGI,uWSGI將返回值進行打包,打包成UWSGI能夠接收的格式,并轉(zhuǎn)發(fā)給nginx,nginx最終將返回值返回給瀏覽器.
6 小問題從上面可以看出,Nginx這一層并不是必須的,uWSGI服務器完全可以完成整個和瀏覽器的交互,但是需要考慮下面的情況
安全問題,程序不能直接被瀏覽器訪問到,而是通過nginx,nginx只開放某個接口,uWSGI本身是內(nèi)網(wǎng)接口,這樣運維人員在nginx上加上安全性的限制,可以達到保護程序的作用
負載均衡問題,一個uWSGI很可能不夠用,即使開了多個work也是不行,畢竟一臺機器的cpu和內(nèi)存都是有限的,有了nginx做代理,一個nginx可以代理多臺uWSGI完成uWSGI的負載均衡
靜態(tài)文件問題,用django或是uWSGI這種東西來負責靜態(tài)文件的處理是很浪費的行為,而且他們本身對文件的處理也不如nginx好,所以整個靜態(tài)文件的處理都直接由nginx完成,靜態(tài)文件的訪問完全不去經(jīng)過uWSGI以及其后面的東西。
參考文章:
python nginx+uwsgi+WSGI 處理請求詳解
Nginx + uWSGI + Webpy配置&原理.md
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/44543.html
摘要:目前就職于,他在各種演講研討會和開發(fā)者大會上積極推廣測試驅(qū)動開發(fā)。問很多敏捷教練都表示訓練新人做測試驅(qū)動開發(fā)是一件辛苦而進度緩慢的事,并且收益也不是很大。首先是開發(fā)的對話式風格。第一個問題就是測試套件的速度。 Harry J.W. Percival目前就職于PythonAnywhere,他在各種演講、研討會和開發(fā)者大會上積極推廣測試驅(qū)動開發(fā)(TDD)。他在利物浦大學獲得計算機科學碩士學...
摘要:目前就職于,他在各種演講研討會和開發(fā)者大會上積極推廣測試驅(qū)動開發(fā)。問很多敏捷教練都表示訓練新人做測試驅(qū)動開發(fā)是一件辛苦而進度緩慢的事,并且收益也不是很大。首先是開發(fā)的對話式風格。第一個問題就是測試套件的速度。 Harry J.W. Percival目前就職于PythonAnywhere,他在各種演講、研討會和開發(fā)者大會上積極推廣測試驅(qū)動開發(fā)(TDD)。他在利物浦大學獲得計算機科學碩士學...
摘要:它需要將近美元才能買到,但是你可以下載免費的和版本。在需要花費美元來開始你的學習,將會有超過頁的內(nèi)容和個多小時的視頻供你訪問,還包括以后可以免費更新。 showImg(https://segmentfault.com/img/bVrJpw); 用Python編寫代碼一點都不難,事實上它一直被贊譽為最容易學的編程語言。如果你準備學習web開發(fā), Python是一個不錯的開始,甚至想做游戲...
摘要:協(xié)議學習常見請求方法學習和學習接口的基本概念接口文檔認識接口測試用例編寫接口測試工具使用軟件測試自動化進階性能測試性能測試的技術要求很高,不僅僅要對性能測試的指標測試分類測試設計有很深刻的理解。 ...
閱讀 7018·2021-09-22 15:08
閱讀 2047·2021-08-24 10:03
閱讀 2533·2021-08-20 09:36
閱讀 1471·2020-12-03 17:22
閱讀 2536·2019-08-30 15:55
閱讀 990·2019-08-29 16:13
閱讀 3141·2019-08-29 12:41
閱讀 3332·2019-08-26 12:12