首先弄清下面几个概念:html
Web Server Gateway Interface
,
WSGI
不是服务器,
python
模块,框架,
API
或者任何软件,只是一种规范,描述
web server
如何与
web application
通讯的规范。
server
和
application
的规范在
PEP 3333中有具体描述。要实现WSGI协议,必须同时实现web server和web application,当前运行在
WSGI
协议之上的
web
框架有
Bottle
,
Flask
,
Django
。
# WSGI是Web 服务器(uWSGI)与 Web 应用程序或应用框架(Django)之间的一种低级别的接口
wsgi server (好比uWSGI) 要和 wsgi application(好比django )交互,uwsgi须要将过来的请求转给django 处理,那么uWSGI 和 django的交互和调用就须要一个统一的规范,这个规范就是WSGI WSGI(Web Server Gateway Interface)
WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。自从 WSGI 被开发出来之后,许多其它语言中也出现了相似接口。
WSGI 的官方定义是,the Python Web Server Gateway Interface。从名字就能够看出来,这东西是一个Gateway,也就是网关。网关的做用就是在协议之间进行转换。
WSGI 是做为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,以提高可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的。
WSGI
同样是一种通讯协议,是
uWSGI
服务器的独占协议,用于定义传输信息的类型(
type of information
),每个
uwsgi packet
前
4byte
为传输信息类型的描述,与WSGI协议是两种东西,听说该协议是
fcgi
协议的10倍快。
web
服务器,实现了
WSGI
协议、
uwsgi
协议、
http
协议等。
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的做用是与uWSGI服务器进行交换。
WSGI server
负责从客户端接收请求,将request
转发给application
,将application
返回的response
返回给客户端;WSGI application
接收由server
转发的request
,处理请求,并将处理结果返回给server
。application
中能够包括多个栈式的中间件(middlewares
),这些中间件须要同时实现server与application,所以能够在WSGI服务器与WSGI应用之间起调节做用:对服务器来讲,中间件扮演应用程序,对应用程序来讲,中间件扮演服务器。WSGI
协议实际上是定义了一种server
与application
解耦的规范,便可以有多个实现WSGI server
的服务器,也能够有多个实现WSGI application
的框架,那么就能够选择任意的server
和application
组合实现本身的web
应用。例如uWSGI
和Gunicorn
都是实现了WSGI server
协议的服务器,Django
,Flask
是实现了WSGI application
协议的web
框架,能够根据项目实际状况搭配使用。python
像Django
,Flask
框架都有本身实现的简单的WSGI server
,通常用于服务器调试,生产环境下建议用其余WSGI server
。nginx
nginx 和 uWSGI交互就必须使用同一个协议,而上面说了uwsgi支持fastcgi,uwsgi,http协议,这些都是nginx支持的协议,只要你们沟通好使用哪一个协议,就能够正常运行了。web
uwsgi是服务器和服务端应用程序的通讯协议,规定了怎么把请求转发给应用程序和返回django
# WSGI和uwsgi https://www.jianshu.com/p/679dee0a4193 # uWSGI,WSGI和uwsgi https://www.cnblogs.com/wspblog/p/8575101.html