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

相关文章
相关标签/搜索