WSGI与uWSGI的应用场景与使用方法
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协议主要包括server和application两部分
===========================
底层内容:有兴趣可以了解一下,没有兴趣勿看
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的应用场景与使用方法的更多相关文章
- 网关协议学习:CGI、FastCGI、WSGI、uWSGI
一直对这四者的概念和区别很模糊,现在就特意梳理一下它们的关系与区别. CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的 ...
- WSGI、uwsgi和uWSGI
一.WSGI WSGI ( Web Server Gateway Interface )是一个网络服务器和网络应用的通用接口的规范或者用于Python框架. 由于python开发人员在网络框架的选择限 ...
- 什么是uWSGI、WSGI、uwsgi、wsgiref、werkzeug
我不是代码的生产者,我只是知识的搬运工 uWSGI.WSGI.uwsgi.wsgiref.werkzeug
- uWSGI ,WSGI和uwsgi的区别
1.1.为方便理解,uWSGI ,WSGI和uwsgi在网站项目流程图中的功能如下: 1.2.网站项目结构图 2.uWSGI ,WSGI和uwsgi的区别 2.1 WSGI: WSGI,全称 Web ...
- 【转】网关协议学习:CGI、FastCGI、WSGI、uWSGI
一直对这四者的概念和区别很模糊,现在就特意梳理一下它们的关系与区别. CGI CGI即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的 ...
- Redo丢失场景和处理方法
Redo丢失场景和处理方法 Type of Failure Status Column of V$LOG Action One member failed in multiplexed group N ...
- cocos2dx中的场景和使用方法
1.一个游戏中有且只有一个导演,但是至少有一个场景 2.场景是游戏元素节点数的根节点,也可以理解为该场景下的渲染树的根节点 3.场景是一个容器,包含了该场景下的所有游戏元素,比如层,精灵 4.场景是导 ...
- cocos2d 场景转换的方法执行顺序
转自:http://shanbei.info/the-cocos2d-scene-conversion-method-execution-order.html 如果你希望在场景转换的过程中使用过渡效果 ...
- 基于MIndSpore框架的道路场景语义分割方法研究
基于MIndSpore框架的道路场景语义分割方法研究 概述 本文以华为最新国产深度学习框架Mindspore为基础,将城市道路下的实况图片解析作为任务背景,以复杂城市道路进行高精度的语义分割为任务目标 ...
随机推荐
- Python3 常用模块2
目录 time 模块 时间戳形式 格式化时间 结构化时间 time.time() time.sleep() datetime 模块 random 模块 hashlib 模块 和 hmac 模块 typ ...
- mini_magick上传图片
rails上传图片需要用到的gem: gem 'carrierwave'gem 'mini_magick' 在项目Gemfil中添加上面的两个gem,然后bundle install 然后创建modl ...
- v-if和v-show 的区别
区别 1.手段:v-if是通过控制dom节点的存在与否来控制元素的显隐:v-show是通过设置DOM元素的display样式,block为显示,none为隐藏: 2.编译过程:v-if切换有一个局部编 ...
- 201871010119-帖佼佼《面向对象程序设计(java)》第八周学习总结
博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...
- 图片验证码推导逻辑,Image.new,ImageDraw, ImageFont.truetype的用法
#一, 创建图片并在图上添加文本 from PIL import Image,ImageDraw,ImageFont a = '我们不一样' # 定义文本 font = ImageFont.truet ...
- 两个变量值交换的方法总结(js,python)
方法一: 临时变量法 <script> var num1 = 10; var num2 = 20; var temp;//定义临时变量 temp = num1; num1 = num2; ...
- CSS样式 解决文字过长显示省略号问题
一.CSS样式 解决文字过长显示省略号问题 1.一般样式 一般 css 样式,当宽度不够时,可能会出现换行的效果.这样的效果在某些时候肯定是不行的,可以修改 css 样式来解决这个问题. <!D ...
- Java工作流引擎表单引擎之JS表单字段输入脚本验证
关键字: 表单设计器, 字段验证. workflow,ccform, ccBPM. 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流bpm工作流系统 java工作流 ...
- 代码管理平台之svn
yum install -y subversion(server和client均安装subversion) configure svn:[root@node01 ~]# mkdir -p /data/ ...
- Vue---记一次通过{{}}获取json数据-页面渲染不出来的坑
前两天干活儿的时候碰到一个Vue的问题,让我这个菜鸡完全摸不到头脑,需求如下:前端页面点击表格中的某一行的详情按钮,会弹出一个Dialog,然后Dialog中有选项卡,选项卡中再有具体的table来展 ...