深入理解WSGI

来自:点融黑帮(微信号:DianrongMafia),作者:点融mafia


前言

Python是一门用途很广泛的也很流程的编程语言,常见的应用有系统编程、爬虫开发、数据分析、人工智能、Web开发等方面,在Web编程方面有一些很成熟的框架供Python开发者选择,如Django、Flask、Tornado,在使用这些框架时,开发者通常会接触到一个概念—WSGI,那么什么是WSGI,本文为大家详细剖析



什么是WSGI

WSGI,全称Python Web Server Gateway Interface,是在PEP333中(PEP3333进行了补充)定义的一种协议,目的是将http底层和框架层解耦,WSGI协议分为两部分,分别为WSGI Server和WSGI Application,WSGI Server负责接受客户端请求、解析请求、并按照协议规范将请求转发给WSGI Application,同时负责接受WSGI Application的响应并发送给客户端;WSGI Application负责接受由WSGI Server发送过来的请求,实现业务处理逻辑,并将标准的响应发回给WSGI Server:

具体来说,WSGI Server解析客户端由socket发送过来的http数据包,将请求的http version、method、host、path等包装成environ参数,并提供start_response回调函数,并将environ和

start_response函数作为参数传递给由WSGI Application提供的callable对象,获取callable对象的返回结果,处理后依照http协议传递给客户端,完成一次请求。


通过wsgiref和webpy理解WSGI的工作流程

Python自带的wsgiref模块实现了一个简单的WSGI Server,接下来我们以这个简单的WSGI Server和webpy框架来进一步理解WSGI的工作流程, 样例代码如下:

通过断点调试,我们梳理出了整个流程的调用栈(省略了一部分):


· 处理http协议头


· 处理变量environ


· 调用webpy框架提供的callable对象


· 进入webpy的处理逻辑


· 通过对environ的处理,结合自己的路由配置定位到目标方法完成业务逻辑处理


中间件

由于WSGI的这种架构特点,可以很容易的实现”中间件”模块,中间件是Web Server和Web Application中承上启下的一个或多个模块,对于Web Server来说,中间件是Web Application,对于Web Application来说,中间件是Web Server,使用中间件,可以实现很多特殊的功能:

推荐↓↓↓
Python编程
上一篇:手把手教你用Python分析电影 | 以《蚁人2》为例 下一篇:2018诺贝尔经济学奖得主,一名62岁的Python教徒