WSGI(Web Server Gateway Interface),是Python在Web开发中的一个概念,是关于Web应用程序如何与Web服务器进行通信的规则。下面是官网的说明:
很好理解,就是说WSGI就是充当Web服务器和Python的Web应用交流的中间桥梁。如下图示:
对于Web应用来说,是一个很直接的请求与响应的场景。浏览器发出一个请求,经过一系列路由之后,传送到服务器,然后服务器上的Web服务程序(Apache、Nginx或者IIS等等)接受该请求,接着把该请求转给Web应用程序,然后,接受并处理。之后,沿着相反的方向把响应送回去。
下面是使用bottle(Python的一个极简Web框架,只有一个py文件)写的一个简单的Web应用程序:
from bottle import route, run, template, static_file
@route('/')
def index():
return template('vase', title='Bottle')
@route('/images/<filename:re:.*\.png>')
def send_image(filename):
return static_file(filename, root='./static/img', mimetype='image/png')
run(host='localhost', port=2345, debug=True)
这就是一个最简单的Web应用程序了,访问主页的时候显示了一张图片,下面是bottle的模板文件,也就是主页的内容了:
<html>
<head>
<title>{{ title or 'No title' }}</title>
</head>
<body>
<img src='images/bottle.png' alt='bottle log' />
</body>
</html>
效果如下所示:
上面是显示的效果,就一张图片。看一看Firebug面板上的内容,其中有一项”Server WSGIServer/0.1 Python/2.7.6”。这个就是Web服务器返回的内容了,我们自己写的程序可不管这些东西的。
下面附上一个使用siege(一款开源的Web压力测试工具)测试bottle和Apache的比对:
持续一分钟测试50个并发请求,bottle下还是明显满了许多。当然也不能拿bottle和Apache相比。可以使用更专业的WSGI服务器来测试对比,如Gunicorn。