Python 开发:认识flup

JerryXia 发表于 , 阅读 (1,174)

一、什么是 WSGI 。

在认识 flup 之前,得先认识一下 WSGI 。

WSGI 的全称为: Python Web Server Gateway Interface v1.0 (Python Web 服务器网关接口),它是 Python 应用程序和 WEB 服务器之间的一种接口,更多详细的细节,可以参考 PEP333 。

它的作用,类似于FCGI 或 FASTCGI 之类的协议的作用。

WSGI 的目标,是要建立一个简单的普遍适用的服务器与 WEB 框架之间的接口。

WSGI 的特点是:简单、可移植等。

二、什么是 flup 。

WSGI 还只是一种规范,一种标准,它要完成的作用是用来定义 Python 应用程序要如何于apache/lighttpd/nginx 等之类的 WEB 服务器之间如何进行通信和交换信息,它不是实际可以直接拿来用的东西。而 flup 就是使用 Python 语言对 WSGI 的一种实现,是可以用于 Python 的应用开发中的一种工具或者说是一种库。

flup 的官方网站为: http://trac.saddi.com/flup 。flup 属于开源软件,采用了 BSD 风格的开放源码授权。

那么, WSGI 除了 flup 外,还有没有其他的实现呢,当然有,更多的实现,可以参考:http://wiki.python.org/moin/WSGIImplementations

三、flup 支持的 WSGI 服务器/网关

flup 支持三种 WSGI 服务器/网关,分别为 AJP 1.3 , FastCGI ,和 SCGI 。而对于 flup 支持的这三种 WSGI 服务器/网关, flup 有分别提供了两种不同风格的版本:线程版本和进程版本。这样, flup 实际就支持六种类型的 WSGI 服务器/网关,分别为:

  • flup.server.ajp
  • flup.server.ajp_fork
  • 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()

四、flup 在 Django 中的应用

作为一款非常著名和使用比较广泛的 Python Web 开发框架,Django 中就应用到了 flup 。 在 django/core/servers/fastcgi.py 文件中,就调用了 django/core/handlers/wsgi.py中的 WSGIHandler() 负责对 WSGI 的应用进行处理。

五、WEB 处理流程

nginx <—– (fastcgi) —-> flup(wsgi/django)
lighttpd <—– (fastcgi) —-> flup(wsgi/django)
apache <—— (cgi/fastcgi/scgi/mod_wsgi) ——> flup(wsgi/django)

添加新评论