python web开发之WSGI/uwsgi/uWSGI详解

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

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

WSGI协议其实是定义了一种serverapplication解耦的规范,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协议进行的

python web开发之WSGI/uwsgi/uWSGI详解_第1张图片  

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: 实现过程图解

python web开发之WSGI/uwsgi/uWSGI详解_第2张图片

参考链接 :

WSGI,uwsgi, uWSGI详解

https://blog.csdn.net/feyehong/article/details/102933412

部署示例:

Nginx+uWSGI+Flask服务部署_nginx flask_Hi~晴天大圣的博客-CSDN博客 

你可能感兴趣的:(python,开发语言)