设为首页 收藏本站
查看: 687|回复: 0

[经验分享] 浅谈 Python WSGI

[复制链接]

尚未签到

发表于 2017-4-23 09:50:58 | 显示全部楼层 |阅读模式
参考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/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-368044-1-1.html 上篇帖子: Python之正则 下篇帖子: python 信号量
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表