uWSGI、WSGI、uwsgi、wsgiref、werkzeug
wsgi
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
wsgiref则是官方给出的一个实现了wsgi标准用于演示用的简单python内置库,它实现了一个简单的wsgi server和wsgi application(在simple_server模块中),主要分为五个模块:simple_server, util, headers, handlers, validate。本质上就是编写一个socket服务端,用于接收用户请求(django)
wsgiref源码地址:
werkzeug
werkzeug 不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个 wsgi 工具包,它可以作为一个 web 框架的底层库,因为它封装好了很多 web 框架的东西,werkzeug,本质上就是编写一个socket服务端,用于接收用户请求(flask),和django中的wsgiref是类似的。
uwsgi
uwsgi:是一种线路协议,是uwsgi服务器的独占协议,用于定义传输信息的类型(type of information),每一个uwsgi packet 前4byte为传输信息类型的描述,与wsgi协议是两种东西。
uwsgi
uwsgi是一个web服务器,它实现了wsgi协议、uwsgi、http等协议。nginx中httpuwsgimodule的作用是与uwsgi服务器进行交换。django项目部署实际上是uwsgi,他才是web服务器,而不是uwsgi。
有了uwsgi为什么还需要nginx?
因为nginx具备优秀的静态内容处理能力,然后将动态内容转发给uwsgi服务器,这样可以达到很好的客户端响应。支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。这时候nginx和uwsgi之间的沟通就要用到uwsgi协议。
下一篇: 冬季减肥食谱 这4种粗粮求别放过