WSGI、uwsgi、uWSGI的詳解

WSGI

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 server ,比如 Flask,webpy,Django、CherryPy等等。當然性能都不好,自帶的 web server 更多的是測試用途,發佈時則使用生產環境的 WSGI server或者是聯合 nginx 做 uwsgi 。

也就是說,WSGI就像是一座橋樑,一邊連着web服務器,另一邊連着用戶的應用。但是呢,這個橋的功能很弱,有時候還需要別的橋來幫忙才能進行處理。WSGI 的作用如圖所示:

uwsgi

二進制協議,可以攜帶任何類型的數據。一個uwsgi分組的頭4個字節描述了這個分組包含的數據類型。

uwsgi是一種線路協議而不是通信協議,在此常用於在uWSGI服務器與其他網絡服務器的數據通信。

uWSGI

uWSGI是實現了uwsgi和WSGI兩種協議的Web服務器,使用c語言開發。

其他說明

兩級結構

在這種結構裏,uWSGI作爲服務器,它用到了HTTP協議以及wsgi協議,flask應用作爲application,實現了wsgi協議。當有客戶端發來請求,uWSGI接受請求,調用flask app得到相應,之後相應給客戶端。 這裏說一點,通常來說,Flask等web框架會自己附帶一個WSGI服務器(這就是flask應用可以直接啓動的原因),但是這只是在開發階段用到的,在生產環境是不夠用的,所以用到了uWSGI這個性能高的WSGI服務器。

三級結構

在這種結構裏,uWSGI作爲中間件,它用到了uwsgi協議(與nginx通信),WSGI協議(調用Flask app,Django APP等)。

提高web server性能(uWSGI處理靜態資源不如nginx;nginx會在收到一個完整的http請求後再轉發給wWSGI)。

nginx可以做負載均衡(前提是有多個服務器),保護了實際的web服務器(客戶端是和nginx交互而不是uWSGI)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章