WSGI /與/ uWSGIhtml
在阿里雲上部署項目時,在通訊中咱們都會用到wsgi與uWSGI,這此我就帶你們來了解一下wsgi與uWSGI。python
對了,上次有個朋友問我Django的生命週期是什麼?我在下一篇博客中給你們講解一下。web
WSGIdjango
WSGI是Web Server Gateway Interface的縮寫。他是PythonWeb服務器網關接口,編程
是Python應用程序或框架和Web服務器之間的一種接口,已經被普遍接受,服務器
它已基本達成它的可移植性方面的目標。併發
其實我以爲他更像一個協議,他能夠運行在任何服務器上WSGI應用(Application)均可以在任何服務器(Server)上運行, 反之亦然。app
CLIENT:客戶端 SERVER:服務器 APPLICATION:應用器負載均衡
(圖片有些模糊,能夠放大看)框架
從這副圖中咱們能夠看出,應用他必須是一個可調用對象,也能夠是一個函數,
也能夠是一個能夠實現__call__()的方法,每收到一個請求,APPLICATION(應用器)會調用應用。
應用在處理完這些數據,準備返回數據的時候,先調用服務傳給它的函數,最後再返回可迭代對象做爲數據。
在上圖中,黃色到綠色之間有一個environ,他包括了請求的相關信息,
好比請求方式、請求路徑等等,start_response是應用處理完畢後,須要調用的函數,
用於告訴服務設置響應的頭部信息或錯誤處理等等,他必須是一個字典,
如::{請求信息:’***’,請求方式:’****’,請求路徑:’****’}。
咱們先定義一個可調用的函數,它可使用服務器傳給它的請求相關的內容 environ,
而後是服務器:能夠在項目文件中找到wsgi_server.py
uWSGI ,uWSGI全稱(Web Server Gateway Interface)
python安裝uWSGI : : https://www.runoob.com/python3/python-uwsgi.html
uWSGI也是一個web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的做用是與uWSGI服務器進行交換。
他不是一個框架,一個軟件,或者是API,而只是一種規範描述web server如何與web application通訊的規範。
WSGI協議主要包括server和application兩部分
===========================
底層內容:有興趣能夠了解一下,沒有興趣勿看
WSGI server負責從客戶端接收請求,將request轉發給application,將application返回的response返回給客戶端;
WSGI application接收由server轉發的request,處理請求,並將處理結果返回給server。
application中能夠包括多個棧式的中間件(middlewares),這些中間件須要同時實現server與application,
所以能夠在WSGI服務器與WSGI應用之間起調節做用,
對服務器來講,中間件扮演應用程序,對應用程序來講,中間件扮演服務器。
uWSGI使用通用的API和通用的配置風格來實現應用服務器 (對於各類編程語言和協議),代理,進程管理器和監控器。
核心 :》 (實現配置、進程管理、socket建立、監控、日誌記錄、共享內存塊、ipc、集羣成員和 uWSGI訂閱服務器)
請求插件:》 (爲各類語言和平臺實現應用服務器接口:WSGI, PSGI, Rack, Lua WSAPI, CGI, PHP, Go ...)
網關:》 (實現負載均衡器、代理和路由器)
Emperor :》(實現大量實例管理和監控)
循環引擎 :》(實現事件和併發,組件能夠在reforking, threaded, asynchronous/evented和green thread/coroutine模式下運行。支持多種技術,
包括uGreen, Greenlet, Stackless, Gevent, Coro::AnyEvent, Tornado, Goroutines和Fibers)
django WSGI application :django項目中能夠找到
WSGI application應該實現爲一個可調用對象,例如函數、方法、類(包含`call`方法)。須要接收兩個參數:
能夠認爲是請求上下文,通常叫作environment(編碼中多簡寫爲environ、env)
經過回調函數將響應狀態和響應頭返回給server,同時返回響應正文(response body),
響應正文是可迭代的、幷包含了多個字符串。
下面是Django中application的具體實現部分:
能夠看出application的流程包括:
1,加載全部中間件,以及執行框架相關的操做,設置當前線程腳本前綴,發送請求開始信號;
2,處理請求,調用get_response()方法處理當前請求,該方法的的主要邏輯是經過urlconf找到對應的view和callback,
按順序執行各類middleware和callback。
3,調用由server傳入的start_response()方法將響應header與status返回給server。
4,返回響應正文
下面表示WSGI server服務器處理流程中關鍵的類和方法。