1、什麼是 WSGI 。 python
在認識 flup 以前,得先認識一下 WSGI 。 nginx
WSGI 的全稱爲: Python Web Server Gateway Interface v1.0 (Python Web 服務器網關接口),它是 Python 應用程序和 WEB 服務器之間的一種藉口,更多詳細的細節,能夠參考 PEP333 。 web
它的做用,相似於FCGI 或 FASTCGI 之類的協議的做用。 apache
WSGI 的目標,是要創建一個簡單的廣泛適用的服務器與 WEB 框架之間的接口。 django
WSGI 的特色是:簡單、可移植等。 瀏覽器
2、什麼是 flup 。 服務器
WSGI 還只是一種規範,一種標準,它要完成的做用是用來定義 Python 應用程序要如何於 apache/lighttpd/nginx 等之類的 WEB 服務器之間如何進行通訊和交換信息,它不是實際能夠直接拿來用的東西。而 flup 就是使用 Python 語言對 WSGI 的一種實現,是能夠用於 Python 的應用開發中的一種工具或者說是一種庫。 cookie
flup 的官方網站爲: http://trac.saddi.com/flup 。flup 屬於開源軟件,採用了 BSD 風格的開放源碼受權。 session
那麼, WSGI 除了 flup 外,還有沒有其餘的實現呢,固然有,更多的實現,能夠參考: app
http://wiki.python.org/moin/WSGIImplementations
3、flup 支持的 WSGI 服務器/網關
flup 支持三種 WSGI 服務器/網關,分別爲 AJP 1.3 , FastCGI ,和 SCGI 。
而對於 flup 支持的這三種 WSGI 服務器/網關, flup 有分別提供了兩種不一樣風格的版本:線程版本和進程版本。
這樣, flup 實際就支持六種類型的 WSGI 服務器/網關,分別爲:
flup.server.ajp
flup.server.ajpfork
flup.server.fcgi
flup.server.fcgifork
flup.server.scgi
flup.server.scgi_fork
flup.server.cgi
使用的參考示例以下:
def myapp(environ, start_response): start_response(’200 OK’, [('Content-Type', 'text/plain')]) return ['Hello World!\n'] if __name__ == ‘__main__’: from flup.server.fcgi import WSGIServer WSGIServer(myapp).run()
4、flup 在 Django 中的應用
做爲一款很是著名和使用比較普遍的 Python Web 開發框架,Django 中就應用到了 flup 。在 django/core/servers/fastcgi.py 文件中,就調用了 django/core/handlers/wsgi.py 中的 WSGIHandler() 負責對 WSGI 的應用進行處理。
5、WEB 處理流程
nginx <——–(fastcgi)——-> flup(wsgi/django)
lighttpd <—–(fastcgi)——-> flup(wsgi/django)
apache<——(cgi/fastcgi/scgi/mod_wsgi)————> flup(wsgi/django)
小注:
Apache/lighttpd:
至關於一個request proxy,根據配置,把不一樣的請求轉發給不一樣的server處理,例如靜態的文件請求本身處理,這個時候它就像一個web server,對於fastcgi/python這樣的請求轉發給flup這樣的Server/Gateway進行處理
flup:
一個用python寫的web server,也就是cgi中所謂的Server/Gateway,它負責接受apache/lighttpd轉發的請求,並調用你寫的程序 (application),並將application處理的結果返回到apache/lighttpd
fastcgi:
apache/lighttpd的一個模塊,雖然flup能夠做爲一個獨立的web server使用,可是對於瀏覽器請求處理通常都交給 apache/lighttpd處理,而後由apache/lighttpd轉發給flup處理,這樣就須要一個東西來把apache/lighttpd 跟flup聯繫起來,這個東西就是fastcgi,它經過環境變量以及socket將客戶端請求的信息傳送給flup並接收flup返回的結果
web.py:
應該說有了上面的東西你就能夠開始編寫你的web程序了,可是問題是你就要本身處理瀏覽器的輸入輸出,還有cookie、session、模板等各 種各樣的問題了,web.py的做用就是幫你把這些工做都作好了,它就是所謂的web framework,另一個出名的是django,不過感受太複雜了,web.py差很少就夠用了
WSGI :
除了flup Server/Gateway外還有不少其餘人的寫的Server/Gateway, 這個時候就會出問題了,若是你在flup上寫了一個程序,如今因爲各類緣由你要使用xdly了,這個時候你的程序也許就要作不少痛苦的修改才能使用 xdly server了,WSGI就是一個規範,他規範了flup這個服務應該怎麼寫,應該使用什麼方式什麼參數調用你寫的程序(application)等,當 然同時也規範你的程序應該怎麼寫了,這樣的話,只要flup跟xdly都遵照WSGI的話,你的程序在兩個上面均可以使用了,flup就是一個WSGI server