首先弄清下面幾個概念:html
Web Server Gateway Interface
,
WSGI
不是服務器,
python
模塊,框架,
API
或者任何軟件,只是一種規範,描述
web server
如何與
web application
通訊的規範。
server
和
application
的規範在
PEP 3333中有具體描述。要實現WSGI協議,必須同時實現web server和web application,當前運行在
WSGI
協議之上的
web
框架有
Bottle
,
Flask
,
Django
。
# WSGI是Web 服務器(uWSGI)與 Web 應用程序或應用框架(Django)之間的一種低級別的接口
wsgi server (好比uWSGI) 要和 wsgi application(好比django )交互,uwsgi須要將過來的請求轉給django 處理,那麼uWSGI 和 django的交互和調用就須要一個統一的規範,這個規範就是WSGI WSGI(Web Server Gateway Interface)
WSGI,全稱 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是爲 Python 語言定義的 Web 服務器和 Web 應用程序或框架之間的一種簡單而通用的接口。自從 WSGI 被開發出來之後,許多其它語言中也出現了相似接口。
WSGI 的官方定義是,the Python Web Server Gateway Interface。從名字就能夠看出來,這東西是一個Gateway,也就是網關。網關的做用就是在協議之間進行轉換。
WSGI 是做爲 Web 服務器與 Web 應用程序或應用框架之間的一種低級別的接口,以提高可移植 Web 應用開發的共同點。WSGI 是基於現存的 CGI 標準而設計的。
WSGI
同樣是一種通訊協議,是
uWSGI
服務器的獨佔協議,用於定義傳輸信息的類型(
type of information
),每個
uwsgi packet
前
4byte
爲傳輸信息類型的描述,與WSGI協議是兩種東西,聽說該協議是
fcgi
協議的10倍快。
web
服務器,實現了
WSGI
協議、
uwsgi
協議、
http
協議等。
uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的做用是與uWSGI服務器進行交換。
WSGI server
負責從客戶端接收請求,將request
轉發給application
,將application
返回的response
返回給客戶端;WSGI application
接收由server
轉發的request
,處理請求,並將處理結果返回給server
。application
中能夠包括多個棧式的中間件(middlewares
),這些中間件須要同時實現server與application,所以能夠在WSGI服務器與WSGI應用之間起調節做用:對服務器來講,中間件扮演應用程序,對應用程序來講,中間件扮演服務器。WSGI
協議實際上是定義了一種server
與application
解耦的規範,便可以有多個實現WSGI server
的服務器,也能夠有多個實現WSGI application
的框架,那麼就能夠選擇任意的server
和application
組合實現本身的web
應用。例如uWSGI
和Gunicorn
都是實現了WSGI server
協議的服務器,Django
,Flask
是實現了WSGI application
協議的web
框架,能夠根據項目實際狀況搭配使用。python
像Django
,Flask
框架都有本身實現的簡單的WSGI server
,通常用於服務器調試,生產環境下建議用其餘WSGI server
。nginx
nginx 和 uWSGI交互就必須使用同一個協議,而上面說了uwsgi支持fastcgi,uwsgi,http協議,這些都是nginx支持的協議,只要你們溝通好使用哪一個協議,就能夠正常運行了。web
uwsgi是服務器和服務端應用程序的通訊協議,規定了怎麼把請求轉發給應用程序和返回django
# WSGI和uwsgi https://www.jianshu.com/p/679dee0a4193 # uWSGI,WSGI和uwsgi https://www.cnblogs.com/wspblog/p/8575101.html