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伺服器(如 nginx),另一邊連著Python的應用程序Application。但是呢,這個橋的功能很弱,有時候還需要別的橋來幫忙才能進行處理。WSGI 的作用如圖所示:

WSGI的作用

WSGI有兩方:「伺服器」或「網關」一方,以及「應用程序」或「應用框架」一方。服務方調用應用方,提供環境信息,以及一個回調函數(提供給應用程序用來將消息頭傳遞給伺服器方),並接收Web內容作為返回值。

所謂的 WSGI中間件同時實現了API的兩方,因此可以在WSGI服務和WSGI應用之間起調解作用:從WSGI伺服器的角度來說,中間件扮演應用程序,而從應用程序的角度來說,中間件扮演伺服器。「中間件」組件可以執行以下功能:

  • 重寫環境變數後,根據目標URL,將請求消息路由到不同的應用對象。
  • 允許在一個進程中同時運行多個應用程序或應用框架。
  • 負載均衡和遠程處理,通過在網路上轉發請求和響應消息。
  • 進行內容後處理,例如應用XSLT樣式表。

WSGI 的設計確實參考了 Java 的 servlet。

接下來,我們要介紹的是 uWSGI。

uWSGI

uWSGI是一個Web伺服器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI伺服器進行交換。

要注意 WSGI / uwsgi / uWSGI 這三個概念的區分。

  • WSGI看過前面小節的同學很清楚了,是一種通信協議。
  • uwsgi同WSGI一樣是一種通信協議。
  • 而uWSGI是實現了uwsgi和WSGI兩種協議的Web伺服器。

uwsgi協議是一個uWSGI伺服器自有的協議,它用於定義傳輸信息的類型(type of information),每一個uwsgi packet前4byte為傳輸信息類型描述,它與WSGI相比是兩樣東西。

為什麼有了uWSGI為什麼還需要nginx?因為nginx具備優秀的靜態內容處理能力,然後將動態內容轉發給uWSGI伺服器,這樣可以達到很好的客戶端響應。

接下來,我們要看看 uWSGI 的安裝配置與使用。

安裝

uWSGI 的安裝很簡單:

1 pip install uwsgi

現在我們試下將 Django 跑起來。我們先在 virtualenv 創建一個 Django Project:

請看這篇文章把:uWSGI詳解 - CSDN博客


推薦閱讀:

TAG:Nginx | WSGI | Django(框架) |