博文 WSGI 简介 对 WSGI 说的很清楚:
WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。具体的来说,WSGI 是一个规范,
定义了 Web 服务器如何与 Python 应用程序进行交互
,使得使用 Python 写的 Web 应用程序可以和 Web 服务器对接起来。
上边已经说的很清楚,WSGI 就是用来规范 Web 服务器(如 Apache)如何与 Python 应用程序(如 Django)进行交互的。这个很重要,因为一般来说,服务器(程序)只有一个(专门处理 HTTP 请求),但应用程序却种类繁多,不可能让服务器为了某个应用程序而开发一套跟其交互的方案;而通过规范(类似 TCP/IP 协议),却能够让服务器与采用同样规范的应用程序连接起来,而不用单独考虑应用程序的特殊性。
上边提到的博客已经讲的非常好了,所以本文更多的是对 WSGI 的实践。另外一个要参考的资料是 Python 官方针对 WSGI 的提案 PEP 3333。这个方案对 WSGI 的各种细节参数都说明的非常详细,一定要仔细看。
WSGI 工作原理
根据前边提到的,WSGI 涉及到两个角色:服务器(称为 Server 或 Gateway)与应用程序(称为 Application 或 Framework)。服务器接收客户端的请求,然后根据请求调用相应的应用程序,应用程序处理完之后返回结果给服务器,服务器(经处理)再将结果返回给客户端。具体地,应用程序向服务端提供一个可调用的对象(callable object
,函数或类,是应用程序的入口),该对象(入口)接收服务端传入的两个参数(environ 和 start_response);服务端通过调用该对象(入口),从而实现对该应用程序的调用,如下图所示: