1.什麼是WSGI?
- WSGI,全稱
Web Server Gateway Interface
,或者 Python Web Server Gateway Interface
,是做爲Python 語言定義的 Web 服務器和 Web 應 用程序或應用框架之間的一種低級別的接口,用來提高可移植Web應用開發的共同點;
- WSGI是基於現存的CGI(通用網關接口)標準而設計的;
- WSGI能夠認爲是一種web server如何與web application通訊的規範,或者是一種協議;
2.服務器與應用程序直接的關係
- WSGI區分爲兩個部分:一爲「服務器」或「網關」,另外一爲「應用程序」或「應用框架」;
- 在處理一個WSGI請求時,服務器會爲應用程序提供環境信息及一個回調函數(Callback Function);
- 當應用程序完成處理請求後,透過前述的回調函數,將結果回傳給服務器;
3.WSGI中間件
- 所謂的 WSGI 中間件同時實現了API的兩方,所以能夠在WSGI服務器和WSGI應用之間起調解做用:從Web服務器的角度來講,中間件扮演應用程序 ,而從應用程序的角度來講,中間件扮演服務器;
「中間件」組件的功能有:html
- 重寫環境變量後,根據目標URL,將請求消息路由到不一樣的應用對象;
- 容許在一個進程中同時運行多個應用程序或應用框架;
- 負載均衡和遠程處理,經過在網絡上轉發請求和響應消息;
- 進行內容後處理,例如應用XSLT樣式表;
4.支持WSGI規範的Web應用框架
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
5.什麼是uwsgi
- uwsgi與WSGI同樣是一種通訊協議或規範,是uWSGI服務器的獨佔協議,用於定義傳輸信息的類型,每個uwsgi packet前4byte爲傳輸信息類型的描述,與WSGI協議是兩種東西,聽說該協議是fcgi協議的10倍快;
6.什麼是uWSGI服務器
- 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
開發模式;
7.web開發入門
- wsgiref 模塊實現的 WSGI Server + 自實現的 WSGI Application
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);
參考:https://www.9xkd.com/user/plan-view.html?id=2127616869web