服务器与wsgi协议,深入理解WSGI
原标题:深入理解WSGI
前言
Python是一门用途很广泛的也很流程的编程语言,常见的应用有系统编程、爬虫开发、数据分析、人工智能、Web开发等方面,在Web编程方面有一些很成熟的框架供Python开发者选择,如Django、Flask、Tornado,在使用这些框架时,开发者通常会接触到一个概念—WSGI,那么什么是WSGI,本文为大家详细剖析
什么是WSGI
WSGI,全称Python Web Server Gateway Interface,是在PEP333中(PEP3333进行了补充)定义的一种协议,目的是将http底层和框架层解耦,WSGI协议分为两部分,分别为WSGI Server和WSGI Application,WSGI Server负责接受客户端请求、解析请求、并按照协议规范将请求转发给WSGI Application,同时负责接受WSGI Application的响应并发送给客户端;WSGI Application负责接受由WSGI Server发送过来的请求,实现业务处理逻辑,并将标准的响应发回给WSGI Server:
具体来说,WSGI Server解析客户端由socket发送过来的http数据包,将请求的http version、method、host、path等包装成environ参数,并提供start_response回调函数,并将environ和
start_response函数作为参数传递给由WSGI Application提供的callable对象,获取callable对象的返回结果,处理后依照http协议传递给客户端,完成一次请求。
通过wsgiref和webpy理解WSGI的工作流程
Python自带的wsgiref模块实现了一个简单的WSGI Server,接下来我们以这个简单的WSGI Server和webpy框架来进一步理解WSGI的工作流程, 样例代码如下:
通过断点调试,我们梳理出了整个流程的调用栈(省略了一部分):
· 处理http协议头
· 处理变量environ
· 调用webpy框架提供的callable对象
· 进入webpy的处理逻辑
· 通过对environ的处理,结合自己的路由配置定位到目标方法完成业务逻辑处理
中间件
由于WSGI的这种架构特点,可以很容易的实现”中间件”模块,中间件是Web Server和Web Application中承上启下的一个或多个模块,对于Web Server来说,中间件是Web Application,对于Web Application来说,中间件是Web Server,使用中间件,可以实现很多特殊的功能:
服务器与wsgi协议,深入理解WSGI相关推荐
- 关于wsgi协议的理解
基础概念 首先要了解 WSGI 规范的概念,WSGI(Web Server Gateway Interface)规范描述了web server(Gunicorn,uWSGI等)如何与web appli ...
- 服务器采购框架合同协议书范本,手写一个满足WSGI协议的Server
在做Web开发时,一个很重要的概念就是服务端和应用程序之间的沟通协议,比如java中的servlet,由于servlet的存在,使得用java开发的web程序既可以跑在tomcat上,也可以是jett ...
- 应用服务器与WSGI协议以及flask后端框架总结(后端接收请求返回响应的整个流程)...
上次遗留了两个问题,先说一下自己的看法 问题: 1.明明一个线程只能处理一个请求,那么栈里的元素永远是在栈顶,那为什么需要用栈这个结构?用普通变量不行吗. 2._request_ctx_stack和_ ...
- [转载] Python Web开发最难懂的WSGI协议,到底包含哪些内容? WSGI服务器种类和性能对比
参考链接: 在Python中创建代理Web服务器 1 http://python.jobbole.com/88653/ 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有开发者希望马 ...
- 服务器与wsgi协议,wsgi
Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口.自 ...
- wsgi php,什么是wsgi?
WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口.具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使 ...
- Java基础之Http协议的理解与总结
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- VRRP协议个人理解(RFC5798)+典型配置+RFC2338/RFC3768文档翻译
本文档源地址位于RFC 2338: Virtual Router Redundancy Protocol,在此仅为个人学习加深理解使用.转载等操作请保留源文档版权声明. RFC2338存在更新RFC3 ...
- 【日常学习】XML文件约束,Tomcat服务器和HTTP协议
文章目录 XML文件约束,Tomcat服务器和HTTP协议 1. XML文件约束[了解] 1.1 约束方式 1.2 DTD约束 1.3 Schema 2. Tomcat服务器 2.1 JavaWEB服 ...
最新文章
- 记录安装oracle的那些事(二)之双系统安装
- 如何在WORD中设置标题1与标题2编号样式不一样
- python判断括号有效,在Python中检查括号是否平衡
- java ocr识别pdf_如何知道PDF是否仅包含图像还是已经过OCR扫描以进行搜索?
- Maven的发布plugin配置
- GStreamer(二)
- 关于脑机接口该如何实现的考虑
- 面试官问你Java内存区域你用new创建对象来解释
- Python之Mac上搭建集成开发环境
- 已经安装mysql xampp_windows 7 本机已安装mysql5的情况上 安装XAMPP
- 聊聊 归一化和标准化
- Java RMI远程方法调用学习总结
- 爬虫项目——BS4练手(1)
- 小米 OJ 编程比赛 02 月常规赛 (Carryon 数数字)
- 蓝桥杯2014java_【图片】2014-2016蓝桥杯java本科B组省赛题_蓝桥杯吧_百度贴吧
- leetcode845. 数组中的最长山脉
- ​LeetCode刷题实战512:游戏玩法分析 II
- c语言中fabs是什么意思,c语言fabs是什么意思_后端开发
- Cisco ASA 基础
- 用户一键登陆,如何实现?了解一下!