本文来自:http://www.nowamagic.net/academy/detail/1330310

WSGI,全程是:Web Server Gateway Interface,或者python Web Server Gateway Interface。实际上,就是python自己定义的一个规范,在WEB服务器和WEB应用程序之间做的一个代理,后来,其他语言也相继实现了。

WSGI 的官方定义是,the Python Web Server Gateway Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。

WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,以提升可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的。

很多框架都自带了 WSGI server ,比如 Flask,webpy,Django、CherryPy等等。当然性能都不好,自带的 web server 更多的是测试用途,发布时则使用生产环境的 WSGI server或者是联合 nginx 做 uwsgi 。

也就是说,WSGI就像是一座桥梁,一边连着web服务器,另一边连着用户的应用。但是呢,这个桥的功能很弱,有时候还需要别的桥来帮忙才能进行处理。WSGI 的作用如图所示:

那么,WSGI的作用是什么呢:

WSGI有两方:“服务器”或“网关”一方,以及“应用程序”或“应用框架”一方。服务方调用应用方,提供环境信息,以及一个回调函数(提供给应用程序用来将消息头传递给服务器方),并接收Web内容作为返回值。

所谓的 WSGI中间件同时实现了API的两方,因此可以在WSGI服务和WSGI应用之间起调解作用:从WSGI服务器的角度来说,中间件扮演应用程序,而从应用程序的角度来说,中间件扮演服务器。“中间件”组件可以执行以下功能:

  • 重写环境变量后,根据目标URL,将请求消息路由到不同的应用对象。
  • 允许在一个进程中同时运行多个应用程序或应用框架。
  • 负载均衡和远程处理,通过在网络上转发请求和响应消息。
  • 进行内容后处理,例如应用XSLT样式表。

WSGI 的设计确实参考了 Java 的 servlet。http://www.python.org/dev/peps/pep-0333/ 有这么一段话:

By contrast, although Java has just as many web application frameworks available, Java's "servlet" API makes it possible for applications written with any Java web application framework to run in any web server that supports the servlet API.

最新文章

  1. [转]Android样式的开发:shape篇
  2. setValuesForKeysWithDictionary 的用法
  3. source insight资源
  4. jmeter笔记3
  5. 试求由a,b,c三个字母组成的n位符号串中不出现aa图像的符号串的数目
  6. 重新启动IIS服务的方法
  7. Hive分区表动态添加字段
  8. 三十天学不会TCP,UDP/IP网络编程 -- TCP中的智慧之连续ARQ
  9. InvalidArgumentError: ConcatOp : Dimensions of inputs should match: shape[0] = [1,136,240,64] vs. shape[1] = [1,135,240,64]
  10. linux环境下遇到的所有问题
  11. .Net core下的配置设置(二)——Option
  12. 前端开发【第一篇: HTML】
  13. mysql手动设置数据表的自增值
  14. php 安装 phpredis 扩展
  15. 【BZOJ3193】 [JLOI2013]地形生成
  16. 【LOJ】#2527. 「HAOI2018」染色
  17. (matlab)plot画图的颜色线型(转)
  18. ARP投毒攻击
  19. js中的target与currentTarget的区别<转>
  20. IOS开发 GCD介绍: 基本概念和Dispatch Queue

热门文章

  1. Javascript进阶:对象实例属性和方法
  2. 修改window 10 开始菜单问题
  3. 剑指Offer - 九度1356 - 孩子们的游戏(圆圈中最后剩下的数)
  4. 《数据结构》C++代码 邻接表与邻接矩阵
  5. freemaker参考地址
  6. python 学习分享-实战篇高级的ftp
  7. 孤荷凌寒自学python第六十一天在Fedora28版的linux系统上找搭建本地Mongodb数据服务
  8. Go的HttpClient实现
  9. Linux 查看当前日期和时间
  10. Java 以及JEE环境快速搭建