原标题:深入理解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相关推荐

  1. 关于wsgi协议的理解

    基础概念 首先要了解 WSGI 规范的概念,WSGI(Web Server Gateway Interface)规范描述了web server(Gunicorn,uWSGI等)如何与web appli ...

  2. 服务器采购框架合同协议书范本,手写一个满足WSGI协议的Server

    在做Web开发时,一个很重要的概念就是服务端和应用程序之间的沟通协议,比如java中的servlet,由于servlet的存在,使得用java开发的web程序既可以跑在tomcat上,也可以是jett ...

  3. 应用服务器与WSGI协议以及flask后端框架总结(后端接收请求返回响应的整个流程)...

    上次遗留了两个问题,先说一下自己的看法 问题: 1.明明一个线程只能处理一个请求,那么栈里的元素永远是在栈顶,那为什么需要用栈这个结构?用普通变量不行吗. 2._request_ctx_stack和_ ...

  4. [转载] Python Web开发最难懂的WSGI协议,到底包含哪些内容? WSGI服务器种类和性能对比

    参考链接: 在Python中创建代理Web服务器 1 http://python.jobbole.com/88653/ 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有开发者希望马 ...

  5. 服务器与wsgi协议,wsgi

    Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口.自 ...

  6. wsgi php,什么是wsgi?

    WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口.具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使 ...

  7. Java基础之Http协议的理解与总结

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  8. VRRP协议个人理解(RFC5798)+典型配置+RFC2338/RFC3768文档翻译

    本文档源地址位于RFC 2338: Virtual Router Redundancy Protocol,在此仅为个人学习加深理解使用.转载等操作请保留源文档版权声明. RFC2338存在更新RFC3 ...

  9. 【日常学习】XML文件约束,Tomcat服务器和HTTP协议

    文章目录 XML文件约束,Tomcat服务器和HTTP协议 1. XML文件约束[了解] 1.1 约束方式 1.2 DTD约束 1.3 Schema 2. Tomcat服务器 2.1 JavaWEB服 ...

最新文章

  1. 记录安装oracle的那些事(二)之双系统安装
  2. 如何在WORD中设置标题1与标题2编号样式不一样
  3. python判断括号有效,在Python中检查括号是否平衡
  4. java ocr识别pdf_如何知道PDF是否仅包含图像还是已经过OCR扫描以进行搜索?
  5. Maven的发布plugin配置
  6. GStreamer(二)
  7. 关于脑机接口该如何实现的考虑
  8. 面试官问你Java内存区域你用new创建对象来解释
  9. Python之Mac上搭建集成开发环境
  10. 已经安装mysql xampp_windows 7 本机已安装mysql5的情况上 安装XAMPP
  11. 聊聊 归一化和标准化
  12. Java RMI远程方法调用学习总结
  13. 爬虫项目——BS4练手(1)
  14. 小米 OJ 编程比赛 02 月常规赛 (Carryon 数数字)
  15. 蓝桥杯2014java_【图片】2014-2016蓝桥杯java本科B组省赛题_蓝桥杯吧_百度贴吧
  16. leetcode845. 数组中的最长山脉
  17. ​LeetCode刷题实战512:游戏玩法分析 II
  18. c语言中fabs是什么意思,c语言fabs是什么意思_后端开发
  19. Cisco ASA 基础
  20. 用户一键登陆,如何实现?了解一下!

热门文章

  1. 8分钟答辩稿_8分钟的发言稿多少字
  2. JINZHIZHUANHUAN
  3. java解析xml格式的节点属性值
  4. 标准差 方差 协方差 相关系数
  5. 【入门软件测试01-抖音项目】
  6. 曝全球最大资管公司富达申请信托许可,将推出加密资管服务
  7. 2020年有寓意的领证日期_2020年,这些日期去领证含有特殊的寓意
  8. ppt模板文本框线条颜色怎么更改?
  9. nohup 不输出日志文件方法
  10. IDEA提示jar包不存在,但是jar包已经导入