WSGI:全称是Web Server Gateway Interface
,WSGI
不是服务器,也不是python
模块、框架、API
或者任何软件,只是一种规范,描述web server
如何与web application
通信的规范。是Web服务器和Web应用程序之间或框架之间的通用接口标准
WSGI就是一座桥梁,WSGI的接口分为两个:一个是与Web服务器的接口,一个是与服务器端程序的接口;WSGI的作用就是在协议之间进行转化。WSGI将Web组件分成了三类:Web 服务器(WSGI Server)、Web中间件(WSGI Middleware)与Web应用程序(WSGI Application)。
Web Server接收HTTP请求,封装一系列环境变量,按照WSGI接口标准调用注册的WSGI Application(如:django程序),最后将响应返回给客户端。
虽然WSGI的设计目标是连接标准的Web服务器(Nginx、Apache)与服务器端程序,但它本身也可以作为Web服务器运行。但由于性能方面的限制,该服务器一般只在测试时使用。
wsgiref则是官方给出的一个实现了WSGI标准用于演示用的简单Python内置库,它实现了一个简单的WSGI Server和WSGI Application(在simple_server模块中),主要分为五个模块:simple_server, util, headers, handlers, validate。本质上就是编写一个socket服务端,用于接收用户请求(django)
wsgiref源码地址:https://pypi.python.org/pypi/wsgiref
werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 WSGI 工具包,它可以作为一个 Web 框架的底层库,因为它封装好了很多 Web 框架的东西,werkzeug,本质上就是编写一个socket服务端,用于接收用户请求(flask),和django中的wsgiref是类似的。
uwsgi:是一种线路协议,是uWSGI服务器的独占协议,用于定义传输信息的类型(type of information),每一个uwsgi packet 前4byte为传输信息类型的描述,与WSGI协议是两种东西。
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。django项目部署实际上是uWSGI,他才是web服务器,而不是uwsgi。
因为nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。这时候nginx和uWSGI之间的沟通就要用到uwsgi协议。
WSGI uwsgi wsgiref uWSGI werkzeug
原文:https://www.cnblogs.com/zhukaijian/p/12879566.html