参考WSGI的官方定义,引用原文
This document specifies a proposed standard interface between web servers and Python web applications or frameworks, to promote web application portability across a variety of web servers.
WSGI,即Python Web Server Gateway Interface(Python Web 服务器网关接口),何谓网关?其实就是完成不同协议之间的转换工作。说到这里,可能会冒出来一个问题:WSGI和CGI(公共网关接口)有什么区别和联系呢?
WSGI和CGI的区别和联系?
CGI(Common Gateway Interface)是Web应用程序和Web Server的底层通信协议,是Web开发过程中需要遵守的标准和规范,不同语言如PHP、Java、Python等完成的Web应用程序均依据此通信协议完成与Web Server的交互。但因为CGI的设计存在性能缺陷,因为每次Web Server接受请求的时候总要重新开启一个CGI进程,进程的初始化既费时间又耗资源,对于少量请求的情况,可以容忍此开销,但是若遇到了大量的请求,服务器的性能则会非常低下。为了解决CGI的性能缺陷问题,后来出现了 FastCGI 和 SCGI,它们能够有效地解决服务器性能问题,FastCGI不同于CGI的设计之处在于FastCGI要求CGI处理进程常驻内存中,有请求时处理,没有请求时等待,免去了进程初始化带来的开销。SCGI即Simple CGI,相对FastCGI来说是一种更加简单的实现。根据以上分析,可见目前的Web底层通信机制已经被FastCGI和SCGI所取代。
WSGI也是为了解决Web应用程序和Web Server之间的交互而提出的一种规范,不过这种规范是以CGI为基础(因为CGI是底层通信协议),位于CGI的上一层更好地去解决应用程序和服务器之间的配合问题。在WSGI没有被提出之前,用户面对如此多的python web开发框架以及不同的服务器的时候总是非常沮丧,因为那时候并没有应用程序和服务器之间的交互规范,用户总是要做些额外的工作以保证应用程序和服务器相互协调正常工作。作为开发者可不希望如此重复且低效的工作,于是提出了WSGI规范,它不管用户采用了什么开发框架,也不管使用了什么服务器,只要双方均依据WSGI规范,那么双方就可以畅快地交互。如今大量的python web开发框架和服务器均包含了WSGI规范的实现,具体可参考链接:WSGIImplementations
现在我们就已最著名的Django框架,来摸索一下WSGI。WSGI作为规范涉及到了应用程序或框架与服务器两端,通常我们在用Django完成了一个app的时候,启动内置的devserver,不需要额外的工作就能够很好的工作,原因是Django作为框架本身已经实现了WSGI规范接口,而内置的devserver同样也是实现了WSGI规范接口,所以两者配合地非常融洽。
那么我们如果将app部署到生产环境不在使用devserver的时候,我们需要如何配置服务器呢?以Apache服务器为例:
- Apache + mod_wsgi模块,此模块实现了服务器端的WSGI规范接口,所以和app同样可以配合工作;
- 另一种使用Apache的方式是我们抛弃mod_wsgi,而是转用FastCGI、SCGI或AJP,根据上文我们知道FastCGI等只是底层的通信机制,而Apache并不负责实现WSGI规范接口,可以看出来服务器端缺少了点什么东西,没错!缺少的正是实现WSGI规范接口的组件,此时 flup 走入我们的视线,根据上文提到的WSGI实现链接,原来flup是实现WSGI规范的服务器,它正好可以配合Apache且弥补Apache没有WSGI规范接口的缺失,FastCGI等作为底层通信机制像胶水一样将Apache和flup黏在了一起。
上面就是我对WSGI的粗浅认识,如有不足请多多指正!
参考地址:http://jasonblog.sinaapp.com/2011/07/12/%E6%B5%85%E8%B0%88-python-wsgi/
分享到:
相关推荐
mod_wsgi 是一个 Apache 模块,实现了 Python WSGI 接口服务
Linux+Django+Python+Wsgi配置过程
Zappa 极大的简化了在 AWS Lambda API 网关上发布所有 Python WSGI 应用。相当于是无服务器的部署运行你的 Python Web 应用
本文主要介绍的是Python WSGI相关内容,主要来自以下网址: What is WSGI? WSGI Tutorial An Introduction to the Python Web Server Gateway Interface (WSGI) 可以看成一次简单粗暴的翻译。 什么是WSGI WSGI的...
如果我们的Web应用是采用Python开发,而且符合WSGI规范,比如基于Django,Flask等框架,那如何将其部署在Apache中呢?本文中,我们就会介绍如何使用Apache模块mod_wsgi来运行Python WSGI应用。 安装mod_wsgi 我们...
mod_wsgi的目标是实现一个简单的Apache模块,支持任何Python WSGI的接口的Python应用程序的托管。
python2.7+Django 1.11 在windows 下部署到apache24 下可用
mod_wsgi各版本,包括cpu架构,python版本限制。用于apache的模块组件。
Python 内置的 WSGI 服务器.py
资源分类:Python库 所属语言:Python 资源全名:necrophos-wsgi-0.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
windows下使用flask+wsgi+Apache部署python web, 博客地址 https://blog.csdn.net/Albert201605/article/details/115429256
支持python2.7的mod_wsgi的windows版本。里面文件包括: mod_wsgi-win32-ap22py27-3.3.so python-2.7.msi
python-Python 内置的 WSGI 服务器.rar
希望apache可以部署django项目的话,就必须在apache的modules目录下放入mod_wsgi.so。这个使用于apache2.2和python2.7.
到Python和WSGI的端口。 使用 。 有关如何将其用于在Python中创建GraphQL服务器(具有中继支持)的演示,请参见 。 学分 该代码由Martijn Faassen移植。 执照 如何执行测试 python2.7 bootstrap-buildout.py bin/...
mod_wsgi-4.5.17+ap24vc14-cp36-cp36m-win_amd64.whl,Apache2.4版本部署Django项目必用模块
为了让大家更好的对python中WSGI有更好的理解,我们先从最简单的认识WSGI着手,然后介绍一下WSGI几个经常使用到的接口,了解基本的用法和功能,最后,我们通过实例了解一下WSGI在实际项目中如何使用。 WSGI是什么? ...
切肉刀 Python WSGI 应用程序的血腥简单 A/B 测试: 在一行代码中呈现显示或行为差异。 测量和比较多个变体之间的转化,包括统计显着性。 保证回头客同样的体验。 与现有的身份验证和存储层轻松集成。 Cleaver 的...