Gateway、WSGI、uwsgi、uWSGI的区别和联系

网关

网关Gateway。网关的作用就是在协议之间进行转换。

WSGI(协议规范)

WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。自从 WSGI 被开发出来以后,许多其它语言中也出现了类似接口。

wsgi server (比如uWSGI) 要和 wsgi application(比如django )交互,uwsgi需要将过来的请求转给django 处理,那么uWSGI 和 django的交互和调用就需要一个统一的规范,这个规范就是WSGI WSGI(Web Server Gateway Interface)

uwsgi

uwsgi是服务器和服务端应用程序的通信协议,规定了怎么把请求转发给应用程序和返回。

uWSGI(web服务器)

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
uWSGI等应用服务器处理静态文件的请求的性能很废材, 所以静态图片文件请求放到nginx。

三者的基本区别

  1. 【协议】WSGI是一种通信协议。
  2. 【协议】uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
  3. 【web服务器】uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

FastCgi协议, uwsgi协议, http协议有什么用?

nginx 和 uWSGI交互就必须使用同一个协议,而上面说了uwsgi支持fastcgi,uwsgi,http协议,这些都是nginx支持的协议,只要大家沟通好使用哪个协议,就可以正常运行了。

服务器一般配置nginx转发;
python开发者一般使用uWSGI的web服务器;
nginx和uWSGI的沟通依赖于都实现了uwsgi协议, 可以沟通。

nginx、uWSGI、框架三者的关系

在架构上是这样的,nginx负责动态的转发和静态文件的直接访问,
gunicorn和uWSGI作为网关服务用来和nginx沟通,并且解析http请求,和应用程序沟通,因此支持和nginx共同的协议语言uwsgi, 支持http协议,因此是支持多种协议的中间接口,
后面的flask只是个application应用程序而已,没有server的服务特征。

中间件还是服务器

如果你选择的架构是:Nginx + WSGI容器 + web应用,WSGI容器相当于一个中间件;
如果你选择的架构是:uWSGI + web应用,WSGI容器则为一个web服务器。

posted @ 2020-06-23 11:32  Adamanter  阅读(453)  评论(0)    收藏  举报