WSGI  /与/  uWSGI

在阿里云上部署项目时,在通信中我们都会用到wsgi与uWSGI,这此我就带大家来了解一下wsgi与uWSGI。

对了,上次有个朋友问我Django的生命周期是什么?我在下一篇博客中给大家讲解一下。

WSGI

WSGI是Web Server Gateway Interface的缩写。他是PythonWeb服务器网关接口,

是Python应用程序或框架和Web服务器之间的一种接口,已经被广泛接受,

它已基本达成它的可移植性方面的目标。

其实我觉得他更像一个协议,他可以运行在任何服务器上WSGI应用(Application)都可以在任何服务器(Server)上运行, 反之亦然。

  CLIENT:客户端       SERVER:服务器       APPLICATION:应用器

          (图片有些模糊,可以放大看)

从这副图中我们可以看出,应用他必须是一个可调用对象,也可以是一个函数,

也可以是一个可以实现__call__()的方法,每收到一个请求,APPLICATION(应用器)会调用应用。

应用在处理完这些数据,准备返回数据的时候,先调用服务传给它的函数,最后再返回可迭代对象作为数据。

在上图中,黄色到绿色之间有一个environ,他包括了请求的相关信息,

比如请求方式、请求路径等等,start_response是应用处理完毕后,需要调用的函数,

用于告诉服务设置响应的头部信息或错误处理等等,他必须是一个字典,

如::{请求信息:’***’,请求方式:’****’,请求路径:’****’}。

我们先定义一个可调用的函数,它可以使用服务器传给它的请求相关的内容 environ,

然后是服务器:可以在项目文件中找到wsgi_server.py

uWSGI ,uWSGI全称(Web Server Gateway Interface

python安装uWSGI : :  https://www.runoob.com/python3/python-uwsgi.html

uWSGI也是一个web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

他不是一个框架,一个软件,或者是API,而只是一种规范描述web server如何与web application通信的规范。

WSGI协议主要包括serverapplication两部分

===========================

底层内容:有兴趣可以了解一下,没有兴趣勿看

WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;

WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。

application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,

因此可以在WSGI服务器与WSGI应用之间起调节作用,

对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器

uWSGI使用通用的API和通用的配置风格来实现应用服务器 (对于各种编程语言和协议),代理,进程管理器和监控器。

核心 :》 (实现配置、进程管理、socket创建、监控、日志记录、共享内存块、ipc、集群成员和 uWSGI订阅服务器)

请求插件:》 (为各种语言和平台实现应用服务器接口:WSGI, PSGI, Rack, Lua WSAPI, CGI, PHP, Go ...)

网关:》 (实现负载均衡器、代理和路由器)

Emperor :》(实现大量实例管理和监控)

循环引擎 :》(实现事件和并发,组件可以在reforking, threaded, asynchronous/evented和green thread/coroutine模式下运行。支持多种技术,

包括uGreen, Greenlet, Stackless, Gevent, Coro::AnyEvent, Tornado, Goroutines和Fibers)

django WSGI application   django项目中可以找到

WSGI application应该实现为一个可调用对象,例如函数、方法、类(包含`call`方法)。需要接收两个参数:

  • 一个字典,该字典可以包含了客户端请求的信息以及其他信息,

   可以认为是请求上下文,一般叫做environment(编码中多简写为environ、env)

  • 一个用于发送HTTP响应状态(HTTP status )、响应头(HTTP headers)的回调函数

通过回调函数将响应状态和响应头返回给server,同时返回响应正文(response body),

响应正文是可迭代的、并包含了多个字符串。

下面是Django中application的具体实现部分:

可以看出application的流程包括:

1,加载所有中间件,以及执行框架相关的操作,设置当前线程脚本前缀,发送请求开始信号;

2,处理请求,调用get_response()方法处理当前请求,该方法的的主要逻辑是通过urlconf找到对应的view和callback,

按顺序执行各种middleware和callback。

3,调用由server传入的start_response()方法将响应header与status返回给server。

4,返回响应正文

下面表示WSGI server服务器处理流程中关键的类和方法。

WSGI与uWSGI的应用场景与使用方法的更多相关文章

  1. 网关协议学习:CGI、FastCGI、WSGI、uWSGI

    一直对这四者的概念和区别很模糊,现在就特意梳理一下它们的关系与区别. CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的 ...

  2. WSGI、uwsgi和uWSGI

    一.WSGI WSGI ( Web Server Gateway Interface )是一个网络服务器和网络应用的通用接口的规范或者用于Python框架. 由于python开发人员在网络框架的选择限 ...

  3. 什么是uWSGI、WSGI、uwsgi、wsgiref、werkzeug

    我不是代码的生产者,我只是知识的搬运工 uWSGI.WSGI.uwsgi.wsgiref.werkzeug

  4. uWSGI ,WSGI和uwsgi的区别

    1.1.为方便理解,uWSGI ,WSGI和uwsgi在网站项目流程图中的功能如下: 1.2.网站项目结构图 2.uWSGI ,WSGI和uwsgi的区别 2.1 WSGI: WSGI,全称 Web ...

  5. 【转】网关协议学习:CGI、FastCGI、WSGI、uWSGI

    一直对这四者的概念和区别很模糊,现在就特意梳理一下它们的关系与区别. CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的 ...

  6. Redo丢失场景和处理方法

    Redo丢失场景和处理方法 Type of Failure Status Column of V$LOG Action One member failed in multiplexed group N ...

  7. cocos2dx中的场景和使用方法

    1.一个游戏中有且只有一个导演,但是至少有一个场景 2.场景是游戏元素节点数的根节点,也可以理解为该场景下的渲染树的根节点 3.场景是一个容器,包含了该场景下的所有游戏元素,比如层,精灵 4.场景是导 ...

  8. cocos2d 场景转换的方法执行顺序

    转自:http://shanbei.info/the-cocos2d-scene-conversion-method-execution-order.html 如果你希望在场景转换的过程中使用过渡效果 ...

  9. 基于MIndSpore框架的道路场景语义分割方法研究

    基于MIndSpore框架的道路场景语义分割方法研究 概述 本文以华为最新国产深度学习框架Mindspore为基础,将城市道路下的实况图片解析作为任务背景,以复杂城市道路进行高精度的语义分割为任务目标 ...

随机推荐

  1. Python3 函数实践之简易购物系统

    函数实践之简易购物系统 项目主要需求: 用户可以自行选择功能 该购物系统具有注册/登录/购物/购物车/退出登录功能 用户在登录后才能使用购物/购物车/退出登录功能 ''' 注册 登录 购物 购物车 退 ...

  2. JS基础知识点——原始类型和对象类型的区别

    1.js类型 1.1 JavaScript语言规定了7种语言类型,他们分别是: Number(数字) Boolean(布尔值) String(字符串) Null (空) Undefined (未定义) ...

  3. 这道Java基础题真的有坑!我求求你,认真思考后再回答。

    本文目录 一.题是什么题? 二.阿里Java开发规范. 2.1 正例代码. 2.2 反例代码. 三.层层揭秘,为什么发生异常了呢? 3.1 第一层:异常信息解读. 3.2 第二层:抛出异常的条件解读. ...

  4. 获取浏览器视口高度device-width

    在进行移动设备web开发时,我们总会用到这样一条代码“<meta name='viewport' content='width=device-width,initial-scale=1.0' / ...

  5. ceph工作原理

    一.概述 Ceph是一个分布式存储系统,诞生于2004年,最早致力于开发下一代高性能分布式文件系统的项目.随着云计算的发展,ceph乘上了OpenStack的春风,进而成为了开源社区受关注较高的项目之 ...

  6. React: 高阶组件(HOC)

    一.简介 如我们所知,JavaScript有高阶函数这么一个概念,高阶函数本身是一个函数,它会接收或者返回一个函数,进而对该函数进行操作.其实,在React中同样地有高阶组件这么一个东西,称为HOC, ...

  7. laravel .env文件的使用

    umen 是 laravel 的衍生品,核心功能的使用和 laravel 都是一致的,但配置文件这一方面,lumen 在 laravel 的基础上增加了更简便的配置方式:lumen 采用了 DotEn ...

  8. Dynamic Code Evaluation:Code Injection 动态代码评估:代码注入

  9. Image 鼠标拖拽与鼠标中键的缩放

    一.Image在窗体上拖拽,势必会用到鼠标的三个事件(MouseDown,MouseUp,MouseMove),以左键为例,PictureBox为载体 Point mouseDownPoint = n ...

  10. 在iframe 中视频可以正常播放,但是就是不能全屏。解决方法

    iframe标签加上webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen="& ...