Python Web初学解惑之 WSGI、flup、fastcgi、web.py的关系

复制代码
Apache/lighttpd: 相当于一个request proxy,根据配置,把不同的请求转发给不同的server处理,例如静态的文件请求自己处理,这个时候它就像一个web server,对于fastcgi/python这样的请求转发给flup这样的Server/Gateway进行处理

 flup: 一个用python写的web server,也就是cgi中所谓的Server/Gateway,它负责接受apache/lighttpd转发的请求,并调用你写的程序 (application),并将application处理的结果返回到apache/lighttpd

fastcgi: apache/lighttpd的一个模块,虽然flup可以作为一个独立的web server使用,但是对于浏览器请求处理一般都交给 apache/lighttpd处理,然后由apache/lighttpd转发给flup处理,这样就需要一个东西来把apache/lighttpd跟flup联系起来,这个东西就是fastcgi,它通过环境变量以及socket将客户端请求的信息传送给flup并接收flup返回的结果

web.py: 应该说有了上面的东西你就可以开始编写你的web程序了,但是问题是你就要自己处理浏览器的输入输出,还有cookie、session、模板等各种各样的问题了,web.py的作用就是帮你把这些工作都做好了,它就是所谓的web framework,另外一个出名的是django,不过感觉太复杂了,web.py差不多就够用了

WSGI : 除了flup Server/Gateway外还有很多其他人的写的Server/Gateway, 这个时候就会出问题了,如果你在flup上写了一个程序,现在由于各种原因你要使用xdly了,这个时候你的程序也许就要做很多痛苦的修改才能使用 xdly server了,WSGI就是一个规范,他规范了flup这个服务应该怎么写,应该使用什么方式什么参数调用你写的程序(application)等,当然同时也规范你的程序应该怎么写了,这样的话,只要flup跟xdly都遵守WSGI的话,你的程序在两个上面都可以使用了,flup就是一个WSGI server
复制代码

        还有一条评论也很透彻

WSGI是python的接口规范,这个规范是针对WEB服务器和python应用(框架等)的交互的。FASTCGI则是两者底层的通信协议的规范。

        学过Java的人马上会想到 Servlet 规范。没错Python的 WSGI规范  就类似于 Java 中的 Servlet规范。 事实上Python的设计者们制定 WSGI规范 就是想达到 像Java中Servletd的效果。

        下面就来 说说 自己对 这些 名词 的理解 

        HTTP Server 就是我们通常所说的 Web Server。我们知道 互联网的 目地就是实现文件的共享,但我们该怎么实现文件共享呢?于是就出现了各种文件共享协议 FTP,SMB,NFS等当然这些协议都属于TCP/IP协议族,架构在TCP/IP 之上 ,属于TCP/IP 中的 运用层。那HTTP呢?

  中文名称:超文本传送协议

       英文名称:hypertext transport protocol;

       HTTP定义:一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

       HTTP和FTP,SMB,NFS一样都属于TCP/IP 协议族中的 运用层,其实我们完全可以按照理解FTP 协议一样 理解HTTP,它们本质是一样的,归根到底都是 机器A对机器B的文件的访问的之间的一种的协议。

       例如 我们在某视频网站上 点击播放 一个视频,当我们点击该视频的时候,浏览器向 该视频网站的服务器上发送HTTP协议内容,该视频网站的Web服务器解析发送过来的HTTP请求,然后将请求交给该视频网站的Web系统来处理,  Web系统 在该服务器上 指定的位置 找到 这个视频文件,在回应给Web服务器,Web服务器在把响应的内容转换为HTTP协议反馈给我们,我们浏览器在解析反馈回来的HTTP内容,播放该视频展示给我们看。

        我这个过程概括起来就是 我们的机器 对 视频网站服务器机器上面的 一个视频文件的访问。他们之间通过HTTP协议来访问。

 

        在来总结 WSGI、flup、fastcgi、web.py之间的关系,这其实是 Web服务器 与 Web系统 之间详细的处理过程。

        Apache/Lighttpd:  HTTP Server(Web服务器),如同原文所说 HTTP Server其实相当于一个 request proxy(请求代理),它们负责解析 HTTP 协议,因为你不能在自己的程序中先 解析HTTP 协议,然后在进行响应的处理。这样的话 第一增加了程序员的工作难度(HTTP解析还真有点负责) 第二:程序会变的复杂,不易修改。所以我们就把解析HTTP协议这个工作交给一种专门的软件来做----HTTP Server。HTTP协议的解析的工作完成了,协议被解析成各种请求,那谁来处理这些请求来?当请求是一个静态文件(HTML文件)的时候,HTTP Server则会自己处理这些请求,此时HTTP Server 就相当于一个Web Server。但当我们请求的是一个 cgi/fastcgi/python 脚本的时候呢?很明显HTTP Server就处理不了啦,因为这些脚本无法直接转换为HTML文本,要依赖于某种特定的容器(环境)下才可以,对于 cgi/fastcgi/python 这样的请求转发给flup这样的Server/Gateway进行处理。就比如我们在Java Web中要请求一个Servlet时,普通的HTTP Server肯定处理不了,Servelt只能运行在实现了Servelt规范的服务器上才可以。

    学过Java Web的看了 原文 后 是不是觉得 Tomcate服务器相当于Python中的(HTTP Server+flup+fastcgi+WSGI)



转载自:http://www.cnblogs.com/ArtsCrafts/archive/2013/01/13/Python_Web.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值