首先弄清下面幾個概念:
WSGI
全稱是
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 標准而設計的。
uwsgi
與
WSGI
一樣是一種通信協議,是
uWSGI
服務器的獨占協議,用於定義傳輸信息的類型(
type of information
),每一個
uwsgi packet
前
4byte
為傳輸信息類型的描述,與WSGI協議是兩種東西,據說該協議是
fcgi
協議的10倍快。
uWSGI
是一個
web
服務器,實現了
WSGI
協議、
uwsgi
協議、
http
協議等。
uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。
WSGI協議主要包括server和application兩部分
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
框架,可以根據項目實際情況搭配使用。

wsgi.png-22.9kB
像Django
,Flask
框架都有自己實現的簡單的WSGI server
,一般用於服務器調試,生產環境下建議用其他WSGI server
。
FastCgi協議, uwsgi協議, http協議有什么用?
nginx 和 uWSGI交互就必須使用同一個協議,而上面說了uwsgi支持fastcgi,uwsgi,http協議,這些都是nginx支持的協議,只要大家溝通好使用哪個協議,就可以正常運行了。
uwsgi是服務器和服務端應用程序的通信協議,規定了怎么把請求轉發給應用程序和返回

# WSGI和uwsgi https://www.jianshu.com/p/679dee0a4193 # uWSGI,WSGI和uwsgi https://www.cnblogs.com/wspblog/p/8575101.html