一、WSGI简介:
Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口协议。
这个协议的主要目的就是保证python中所有Web Server程序或者说是Gateway(网关)程序,能够通过统一的协议跟Web 框架或者说是Web 应用进行交互。
二、WSGI,uWSGI,uwsgi 的关系:
我相信,刚看到这三个玩意的时候,不只是我被他们弄得糊里糊涂。这里详细的给大家介绍一下这三个看着差不多,实际又不同的东西究竟有何区别。
首先强调本质区别:uWSGI 是服务器,而:WSGI 和 uwsgi 是协议。
废话不多说,上图:
uWSGI:是 python web 框架的通用服务器,用于处理请求和框架之间的交互,而交互的协议便是WSGI,本质上负责的功能和Nginx是一样的。
uwsgi:则是uWSGI服务器自有的协议,用于定义传输数据的类型等,是Nginx与uWSGI交互的工具。
三、既然有uWSGI了为什么还要用Nginx:
首先,两者的功能实际上都是一致的,都是分析HTTP请求,然后通信给后端框架进行数据处理,再把结果反馈给用户。
实则,不使用Nginx的情况下,web server一样可以运行,如图中的下面那一条逻辑。
但Nginx是专业级选手,适用于任何语言,uWSGI则是仅用于python web的一个服务器框架,前者的强大也不是后者可以比拟的。
Nginx有着更为强大的性能,比如均衡负载能力、更强的静态资源的加载能力、多项目部署,前后端分离等等,这些都是uWSGI不具备或是不如的地方。
四、ASGI和WSGI的关系:
ASGI名为异步网关接口,实际上是WSGI的一个扩展,支持了websocket通信,在框架中没有使用到websocket通信时,使用WSGI就足够了。
后续,这篇文章会更新对于WSGI的深入探索,以上内容仅是我个人学习理解的内容,并不代表就一定是正确的,如有问题欢迎提出更改。



