1. 三者的定义
- WSGI是一种通信协议。
- uwsgi是一种传输协议。
- uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
2.三者的使用场景
WSGI,全称 Web Server Gateway Interface,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。
server端会先收到用户的请求,然后会根据规范的要求调用application端,调用的结果会被封装成HTTP响应后再发送给客户端。
要使用WSGI,需要分别实现server角色和application角色。
WSGI
协议主要包括server
和application
两部分:
WSGI server
负责从客户端接收请求,将request
转发给application
,将application
返回的response
返回给客户端;- WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用。
WSGI
协议其实是定义了一种server
与application
解耦的规范,Application端的实现一般是由Python的各种框架来实现的,比如Django,Flask,Tornado, web.py等,一般开发者不需要关心WSGI的实现,框架会会提供接口让开发者获取HTTP请求的内容以及发送HTTP响应;Server端的实现会比较复杂一点,这个主要是因为软件架构的原因。一般常用的Web服务器,如Apache和nginx,都不会内置WSGI的支持,而是通过扩展来完成。Nginx上一般是用proxy的方式,用nginx的协议将请求封装好,发送给应用服务器,比如uWSGI,应用服务器会实现WSGI的服务端、进程管理以及对application的调用。
以提升可移植 Web 应用开发的共同点。
例如: uWSGI和Gunicorn都是实现了WSGI server协议的服务器,Django,Flask是实现了WSGI application协议的web框架,可以根据项目实际情况搭配使用。
wsgi server (比如uWSGI)实现wsgi协议规范的服务器我们叫做wsgi服务器,也就是uWSGI服务器
wsgi application(比如django )实现wsgi协议的应用,我们叫做wsgi应用,比如Django,Falsk
uwsgi 常用于在uWSGI服务器与其他网络服务器的数据通信;是
uWSGI服务器
实现的一个自有的协议,即uWSGI 的一种内部协议(之前的协议都是使用字符串,而采用二进制来存储和解析数据的uwsgi的速度更快)
- WSGI是一种通信协议。
- uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器(Nginx)的数据通信。
Nginx(对外服务器)和uWSGI(对内服务器)之间的通信,是基于uwsgi协议进行的
uWSGI 是一种web服务器,是实现了uwsgi,WSGI,http协议的Web服务器。(类似的web服务器还有部署java web应用的
tomcat
)uWSGI旨在为部署分布式集群的网络应用开发一套完整的解决方案。主要面向web及其标准服务。由于其可扩展性,能够被无限制的扩展用来支持更多平台和语言。它要做的就是把HTTP协议转化成语⾔⽀持的⽹络协议。⽐如把HTTP协议转化成WSGI协议,让Python可以直接使⽤。Nginx中HttpUwsgiModule的作⽤是与uWSGI服务器进⾏交换。
uWSGI的主要特点是:
- 超快的性能
- 低内存占用
- 多
app
管理- 详尽的日志功能(可以用来分析
app
的性能和瓶颈)- 高度可定制(内存大小限制,服务一定次数后重启等)
为什么有了uWSGI为什么还需要nginx?因为nginx具备优秀的静态内容处理能⼒,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。
WSGI,uwsgi, uWSGI: 实现过程图解
参考链接 :
https://blog.csdn.net/feyehong/article/details/102933412
部署示例: