WSGI技术简介
WSGI ( Web Gateway Interface),即服务器网关接口,是Web服务器和 web 应用程序或框架之间的一种简单而通用的接口。FastCGI 的工作模式实际上没有什么太大缺陷,但是在 FastCGI 标准下写异步的 web 服务还是不方便,所以 WSGI 就被创造出来了。
WSGI ( Web Server Gateway Interface),即服务器网关接口,是Web服务器和 web 应用程序或框架之间的一种简单而通用的接口。从层级上来讲要比 CGI/FastCGI 高级。WSGI 中存在两种角色:接受请求的 Server(服务器)和处理请求的 Application(应用),它们底层是通过 FastCGI 沟通的。当 Server 收到一个请求后,可以通过 Socket 把环境变量和一个 Callback 回调函数传给后端 Application, Application在完成页面组装后通过 Callback 把内容返回给 Server,最后 Sever 再将响应返回给 Client。 整个流程如下图所示。
1、定义 WSGI 接口
WSGI 接口定义非常简单,它只要求 web 开发者实现一个函数,就可以响应 HTTP 请求。我们来看一个最简单的 Web 版本的“Hello World!”,代码如下:
def application(environ, start_response): start_response('200 OK', [('Content-Type', 'text/html')]) return [b'<h1>Hello, world!</h1>']
上面的 application() 函数就是符合 WSGI 标准的一个 HTTP 处理函数,它接收两个参数:
environ:一个包含所有 HTTP 请求信息的字典对象。
start_response:一个发送 HTTP 响应的函数。
整个 application() 函数本身没有涉及任何解析 HTTP 的部分,也就是说,把底层 Web 服务器解析部分和应用程序逻辑部分进行了分离,这样开发者就可以专心于一个领域了。
可是要如何调用 application() 函数呢?environ 和 start_respons 这两个参数需要从服务器获取,所以 application() 函数必须由 WSGI 服务器来调用。现在,很多服务器都符合 WSGI 规范,如 Apache服务器 和 Nginx 服务器等。此外,Python 内置了一个 WSGI 服务器,这就是 wsgiref 模块。它是用 Python 编写的 WSGI 服务器的参考实现。所谓“参考实现”是指该实现完全符合 WSGI 标准,但是不考虑任何运行效率,仅供开发和测试使用。
2、运行 WSGI 服务
本文未完全显示,开通会员查看全文......