Python WSGI fastcgi

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.fcgi
fork
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

相關文章
相關標籤/搜索