WSGI:全稱是Web Server Gateway Interface
,WSGI
不是服務器,也不是python
模塊、框架、API
或者任何軟件,只是一種規範,描述web server
如何與web application
通訊的規範。是Web服務器和Web應用程序之間或框架之間的通用接口標準python
WSGI就是一座橋樑,WSGI的接口分爲兩個:一個是與Web服務器的接口,一個是與服務器端程序的接口;WSGI的做用就是在協議之間進行轉化。WSGI將Web組件分紅了三類:Web 服務器(WSGI Server)、Web中間件(WSGI Middleware)與Web應用程序(WSGI Application)。
Web Server接收HTTP請求,封裝一系列環境變量,按照WSGI接口標準調用註冊的WSGI Application(如:django程序),最後將響應返回給客戶端。nginx
雖然WSGI的設計目標是鏈接標準的Web服務器(Nginx、Apache)與服務器端程序,但它自己也能夠做爲Web服務器運行。但因爲性能方面的限制,該服務器通常只在測試時使用。web
wsgiref則是官方給出的一個實現了WSGI標準用於演示用的簡單Python內置庫,它實現了一個簡單的WSGI Server和WSGI Application(在simple_server模塊中),主要分爲五個模塊:simple_server, util, headers, handlers, validate。本質上就是編寫一個socket服務端,用於接收用戶請求(django)
wsgiref源碼地址:https://pypi.python.org/pypi/wsgirefdjango
werkzeug 不是一個web服務器,也不是一個web框架,而是一個工具包,官方的介紹說是一個 WSGI 工具包,它能夠做爲一個 Web 框架的底層庫,由於它封裝好了不少 Web 框架的東西,werkzeug,本質上就是編寫一個socket服務端,用於接收用戶請求(flask),和django中的wsgiref是相似的。flask
uwsgi:是一種線路協議,是uWSGI服務器的獨佔協議,用於定義傳輸信息的類型(type of information),每個uwsgi packet 前4byte爲傳輸信息類型的描述,與WSGI協議是兩種東西。服務器
uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的做用是與uWSGI服務器進行交換。django項目部署其實是uWSGI,他纔是web服務器,而不是uwsgi。併發
由於nginx具有優秀的靜態內容處理能力,而後將動態內容轉發給uWSGI服務器,這樣能夠達到很好的客戶端響應。支持的併發量更高,方便管理多進程,發揮多核的優點,提高性能。這時候nginx和uWSGI之間的溝通就要用到uwsgi協議。app