WSGI和uwsgi和uWSGI---概念
一.概述
- WSGI是一种通信协议。
- uwsgi是一种传输协议。
- uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
二.WSGI
Python语言有多种web框架:
Django
,Flask
,Tornado
,web.py
等.我们可以基于这些web框架开发web应用基于Python语言开发的web应用需要部署在支持python的web服务上:uWSGI
,Gunicorn
,Waitress
,flup
我们可能会遇到这样的问题: 当要把一个web服务器和一个基于框架开发的web应用结合起来时,却发现他们并不兼容,例如基于Django框架开发的web应用只能部署在uWSGI
上,而无法部署在Gunicorn
上
那么如何保证基于不同的web框架开发的web应用能运行在各个web服务器上呢?
或者说如何让各个web服务器兼容基于不同的web框架开发的web应用呢?
这个时候需要WSGI协议登场
2.1 协议简介1
-
WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。自从 WSGI 被开发出来以后,许多其它语言中也出现了类似接口: java有Servlet API,Ruby 有 Rack。
-
WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,以提升可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的
WSGI协议允许开发者可以混合匹配web服务器和web框架,选择一个适合的配对。比如,可以在Gunicorn 或 Nginx/uWSGI 或 Waitress等web服务器上运行 基于Django, Flask等开发的web应用
web服务器必须具备WSGI接口,所有的现代Python Web框架都已具备WSGI接口
它让你不对代码作修改就能使服务器和特点的web框架协同工作。
也就是说web框架和web服务器都必须实现WSGI接口
2.2 协议简介2
WSGI
协议主要包括server
和application
两部分:
-
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
框架,可以根据项目实际情况搭配使用。
-
wsgi server (比如uWSGI)实现wsgi协议规范的服务器我们叫做wsgi服务器,也就是uWSGI服务器
-
wsgi application(比如django )实现wsgi协议的应用,我们叫做wsgi应用,比如Django,Falsk
WSGI server相当于螺丝,WSGI application相当于螺母,只有实现了标准的服务器和框架才能部署到一起
三.uwsgi
uwsgi协议(传输协议,速度很快):uWSGI服务器
实现的一个自有的协议,是uWSGI 的一种内部协议(之前的协议都是使用字符串,而采用二进制来存储和解析数据的uwsgi的速度更快)
- WSGI是一种通信协议。
- uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器(Nginx)的数据通信。
Nginx(对外服务器)和uWSGI(对内服务器)之间的通信,是基于uwsgi协议进行的
四.uWSGI
概述: 是一个web服务器,类似的web服务器还有部署java web应用的tomcat
uWSGI
旨在为部署分布式集群的网络应用开发一套完整的解决方案。主要面向web
及其标准服务。由于其可扩展性,能够被无限制的扩展用来支持更多平台和语言。uWSGI
是一个web
服务器,实现了WSGI
协议,uwsgi
协议,http
协议等。uWSGI
的主要特点是:
- 超快的性能
- 低内存占用
- 多
app
管理 - 详尽的日志功能(可以用来分析
app
的性能和瓶颈) - 高度可定制(内存大小限制,服务一定次数后重启等)
Python需要使用nginx + uWSGI 提供静态页面访问,和高并发
php 需要使用 nginx + fastcgi 提供高并发
java 需要使用 nginx + tomcat 提供 web 服务
Python标准库提供的独立WSGI服务器叫wsgiref
,Django开发环境用的就是这个模块来做服务器,
上线之后一般使用uWSGI服务器
uWSGI实现了WSGI的所有接口, uWSGI代码完全用C编写,效率高、性能稳定。
五.参考资料
根据以下博客整理:
https://www.cnblogs.com/quegai18/p/10509996.html
https://www.cnblogs.com/wcx666/p/10444400.html
https://www.cnblogs.com/biggw/p/11342109.html
https://www.cnblogs.com/big-handsome-guy/p/8664618.html
https://www.cnblogs.com/guokaifeng/p/11007359.html
https://blog.****.net/mnszmlcd/article/details/78819237