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协议主要包括serverapplication两部分:

  • WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;
  • WSGI application接收由server转发的request,处理请求,并将处理结果返回给serverapplication中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,因此可以在WSGI服务器与WSGI应用之间起调节作用:对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器。

WSGI协议其实是定义了一种serverapplication解耦的规范,即可以有多个实现WSGI server的服务器,也可以有多个实现WSGI application的框架,那么就可以选择任意的serverapplication组合实现自己的web应用。

例如uWSGIGunicorn都是实现了WSGI server协议的服务器,DjangoFlask是实现了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.csdn.net/mnszmlcd/article/details/78819237

发布了19 篇原创文章 · 获赞 2 · 访问量 6555

猜你喜欢

转载自blog.csdn.net/feyehong/article/details/102933412
今日推荐