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. kubernetes-集群备份和恢复

    一.备份   思路: ①集群运行中etcd数据备份到磁盘上 ②kubeasz项目创建的集群,需要备份CA证书文件,以及ansible的hosts文件   [deploy节点操作] 1:创建存放备份文件 ...

  2. Javascript 垃圾回收方法

    Javascript 垃圾回收方法 标记清除(mark and sweep) 这是 JavaScript 最常见的垃圾回收方式,当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为& ...

  3. 【Java Web开发学习】Spring JPA

    [Java Web开发学习]Spring JPA 转载:https://www.cnblogs.com/yangchongxing/p/10082864.html 1.使用容器管理类型的JPA JND ...

  4. python故障排除

    在初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂.这里列出了常见的的一些让程序 crash 的运行时错误. 1)忘记在 if , elif , else , for , ...

  5. eps-07s,编译及其烧写

    项目导入 清理并编译 会出现两个bin文件,然后烧写 修改红框中的东西,然后返回操作界面,进行一键烧写 硬件接线图 设备调试

  6. 骚年,如果你还不懂一些java常识?中了奖也无法兑换

    今天下午约着几个朋友一起去看叶问4,结果碰到了一个有趣的事情,正好和java有关所以写一篇文章来记录一下. 事件:我和朋友小李.小王一起去看电影 时间:2019/12/21 地点:H市某家电影院 起因 ...

  7. Web基础了解版05-Servlet

    Servlet Servlet? 从广义上来讲,Servlet规范是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案.而具体的Servlet容器负责提 ...

  8. Linux 的目录结构

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/cbbf47b0-f ...

  9. Asp.Net MVC中记录错误日志保存到本地txt文件

    为了方便查询系统出错弄个错误日志出来对于维护运维来说是很有必要的. 1.在Asp.Net MVC项目中的App_Start添加一个用于处理异常类的文件ErrorLog让他继承HandleErrorAt ...

  10. .NET Core使用RabbitMQ

    RabbitMQ简介 RabbitMQ是一个开源的,基于AMQP(Advanced Message Queuing Protocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点, ...