WSGI,全稱 Web Server Gateway Interface
,或者 Python Web Server Gateway Interface
,是做爲Python 語言定義的 Web 服務器和 Web 應 用程序或應用框架之間的一種低級別的接口,用來提高可移植Web應用開發的共同點;html
WSGI是基於現存的CGI(通用網關接口)標準而設計的;web
WSGI能夠認爲是一種web server如何與web application通訊的規範,或者是一種協議;後端
WSGI區分爲兩個部分:一爲「服務器」或「網關」,另外一爲**「應用程序」或「應用框架」**;服務器
在處理一個WSGI請求時,服務器會爲應用程序提供環境信息及一個回調函數(Callback Function);網絡
當應用程序完成處理請求後,透過前述的回調函數,將結果回傳給服務器;app
「中間件」組件的功能有:負載均衡
重寫環境變量後,根據目標URL,將請求消息路由到不一樣的應用對象;框架
容許在一個進程中同時運行多個應用程序或應用框架;webapp
負載均衡和遠程處理,經過在網絡上轉發請求和響應消息;分佈式
進行內容後處理,例如應用XSLT樣式表;
BlueBream bobo Bottle CherryPy Django Flask Google App Engine's webapp2 Gunicorn prestans Pylons Pyramid restlite Tornado Trac TurboGears Uliweb web.py web2py weblayer Werkzeug
uWSGI服務器是一個web服務器,實現了基於uwsgi協議的server部分,相似於Java的Tomcat,實現了WSGI協議、uwsgi協議、http協議等, 可以將 http請求進行處理,在內部處理的邏輯從表面上看相似將HTTP請求轉化爲WSGI協議的請求,其爲部署分佈式集羣的網絡應用提供了一套完整的解決方案;
uWSGI的主要特色是:強悍的響應性能,低內存佔用,多app管理,詳盡的日誌功能以及高度可定製;
只須要在uWSGI的配置文件中指定application的地址,uWSGI就能直接和應用框架中的WSGI application通訊,這就是經常使用的uWSGI + Django
開 發模式,若是須要Nginx作反向代理等功能,能夠將整個web服務器擴展爲 Nginx + uWSGI + Django
開發模式;
from wsgiref.simple_server import make_server def wsgi_application(environ, start_response): status = '200 OK' headers = [('Content-Type', 'text/html;charset=utf-8')] start_response(status, headers) html_template = '<h1> Hello World <h1>'.encode() return [html_template, ] if __name__ == '__main__': HOST = '127.0.0.1' PORT = 9000 server = make_server(HOST, PORT, wsgi_application) server.serve_forever()
wsgiref模塊提供了一個WSGI Server服務器實現的參照樣本,在生產開發Web服務器不能使用這個模塊,僅僅是用來學習的服務器模塊,重點是學習 WSGI Server實現的原理Django的WSGI Server服務器也不能做爲生產Web服務器提供服務,由於Django的WSGI Server也是一個實驗類型的WSGI Server;
Django的WSGI Server服務器也不能做爲生產Web服務器提供服務,由於Django的WSGI Server也是一個實驗類型的WSGI Server
;
在生產中一般使用高性能的WSGI Server,例如:uWSGI服務器,Gunicorn服務器(Jumpserver
使用這個這個WSGI Server
服務器, 後端的WSGI Application
是Django的Application);