因为目前已经有很多关于WSGI的博客或者文章了,通过这些文章已经能够很好的去了解WSGI服务器,所以这里就不再重复造轮子,简单写写我个人的理解。
一、什么是WSGI
WSGI是一种接口,规定了web服务器应该怎么与web应用进行交互。可以理解为WSGI只是一种约定,所有的Python Web服务器都应该遵循这个约定,这样方便了不同的python web应用在不同的web服务器之间迁移。
Attention
WSGI的全称其实是Python Web Server GateWay Interface,所以只是约定了Python的web应用与Python服务器之间的接口
二、WSGI与Web应用
- WSGI可以分成两部分server/gateway以及application/framework,除此之外,也还可以多加一部分作为中间件middleware。
- Server/Gateway 这部分是后端里面最“前面”的部分,所有的请求都是先到达这一部分。
- Middleware 这部分是作为连接Server与Application之间的部分主要承担的工作就是路由、负载均衡、请求预处理等。
- Application/Framework 这里就是真正处理请求的部分,包含了大部分的处理逻辑。
- WSGI主要的部分就是规定了application必须是一个可调用的对象,可以是一个函数、一个类或者是一个实现了call的实例,并且这个对象必须接受两个参数environ和start_response,而server侧必须通过位置参数来调用这个可调用对象。environ参数是一个字典,包含了请求的信息,而start_response参数则是一个可调用对象,必须接受两个位置参数,status和response_header。status就是个字符串,表示HTTP 响应状态,比如“400 Bad Request”这种,response_header就是个键值对的列表,包含了响应头的字段值。
- 总的来说就是一个请求到达Server侧后,Server会生成请求对应的environ参数,然后调用application(environ,start_response),application内部处理完请求后,生成响应状态和响应请求头,并用这两个参数调用start_response,返回结果到Server,Server最后生成响应。
其实协议文档里面写了start_response函数必须返回一个write可调用对象,但这个对象具体的作用是啥,暂时还没看懂,看懂后补充
三、常见WSGI服务器
Gunicorn、uWSGI这些都是