参考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/
分享到:
相关推荐
`cpp-modwsgi` 是一个专为Apache服务器设计的模块,它实现了Python的Web服务器网关接口(WSGI)标准。这个模块,通常称为`mod_wsgi`,使得开发者可以使用Python语言来编写Web应用,并在Apache环境下运行。在本文中,...
### Linux+Django+Python+Wsgi配置过程 #### 一、环境准备与系统基本信息 根据提供的文件信息,本文档将详细介绍如何在Linux环境下配置Apache+Mod_Wsgi+Django环境的过程。具体步骤包括软件安装、项目部署等环节。...
Python WSGI(Web Server Gateway Interface)是一种标准接口,它定义了Web服务器如何与Web应用程序进行通信。这个规范由PEP 3333提出,旨在简化Python Web开发中的复杂性,让不同的服务器和框架之间能够更好地协同...
Python-Zappa 是一个开源工具,它为 Python 开发者提供了一种极其便捷的方式,将基于 WSGI(Web Server Gateway Interface)的 Python Web 应用部署到 AWS Lambda 和 API Gateway 上,实现“无服务器”架构。...
如果我们的Web应用是采用Python开发,而且符合WSGI规范,比如基于Django,Flask等框架,那如何将其部署在Apache中呢?本文中,我们就会介绍如何使用Apache模块mod_wsgi来运行Python WSGI应用。 安装mod_wsgi 我们...
python2.7+Django 1.11 在windows 下部署到apache24 下可用
`mod_wsgi` 是一款用于在Apache Web服务器上部署和运行Python Web应用程序的模块,它实现了WSGI(Web Server Gateway Interface)标准。WSGI是Python Web应用的通用接口,让Web服务器与Web应用之间能进行通信。通过`...
Apache 2.2 和 Python 2.7 之间的交互主要依赖于一个名为 mod_wsgi 的模块,它是 Apache HTTP 服务器的一个扩展,允许在 Apache 上运行 Python Web 应用程序,特别是像 Django 这样的高级 Web 框架。在本场景中,...
Python 内置的 WSGI 服务器.py
### Windows平台Apache 24与mod_wsgi部署Python应用详解 #### 一、概述 在Windows平台上部署Python Web应用时,经常会遇到各种各样的问题。本文将详细介绍如何使用Apache 2.4结合mod_wsgi模块来高效地部署Python...
标题“mod_wsgi3.5(按照apache版本,python版本,系统版本选择使用)”指的是mod_wsgi的3.5版本,它是一个用于在Apache web服务器上运行Python应用的模块,特别是Django框架的应用。这个标题强调了在选择和安装mod_...
资源分类:Python库 所属语言:Python 资源全名:necrophos-wsgi-0.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
3. **版本兼容性**:“mod_wsgi-3.5”可能有特定的Python版本要求,例如,可能只支持Python 2.7或Python 3.x的某个子版本。了解这些限制对于正确部署和运行Python应用至关重要。 4. **CPU架构**:此版本可能支持...
Python内置的WSGI服务器是Python标准库中的一个轻量级Web服务器,主要用于开发和测试目的。WSGI(Web Server Gateway Interface)是一种Web服务器与Web应用之间的接口标准,它定义了两者如何交互,使得不同的Web...
eventlet-Python支持 WSGI 的异步框架
windows下使用flask+wsgi+Apache部署python web, 博客地址 https://blog.csdn.net/Albert201605/article/details/115429256
标题中的“wsgi_lineprof-0.4.0-cp33-cp33m-manylinux1_x86_64.whl”是一款基于Python的WSGI(Web Server Gateway Interface)性能分析工具,名为wsgi_lineprof。这个库主要用于帮助开发者优化他们的Python WSGI应用...
`mod_wsgi` 是一个用于在Apache Web服务器上部署Python应用程序的模块,它提供了高效率和安全的环境来运行Python应用,比如Django等框架。标题“mod_wsgi.so全版本下载”暗示了这是一个包含不同版本的`mod_wsgi`库,...