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

   首先声明这篇文章 是我从 豆瓣 上面看到的。 原文地址 http://www.douban.com/note/13508388/?start=0&post=ok#last    看我之后 豁然开朗,对Web的理解有加深了一层,在此再感谢一下文章的作者。写这篇文章 :一 写下 自己的理解;二  让更多初学Python Web开发和我有相同迷惑的人能到看到这篇文章

   先把原文的内容贴出来

复制代码
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.mzph.cn/news/352377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

继承Javadoc方法注释

尽管用于javadoc工具的JDK工具和实用程序页面通过实现和继承方法来描述Javadoc方法注释重用的规则,但是当实际上不需要使用{inheritDoc}时,很容易不必要地显式描述注释继承,因为会使用相同的注释隐式继承。 Java 8 javadoc工具页面在“ 方法公…

C++之手写strlen函数

代码: int strlen(const char *str){ assert(str!NULL); intlen0; while((*str)!\0) len;return len; } 这个函数实现起来较为简单,注意字符指针的有效性检查。 可参考:strlen、strcpy、strcat等字符串处理函数的实现 转载于:https://www.cnb…

mysql or优化_MySQL 语句优化

官方文档放这里,有什么代码先到官方文档查询:MySQL 8.0 Reference Manual :: 8 Optimization​dev.mysql.com优化涉及多个级别的配置,调整和测量性能。 根据工作角色(开发人员,DBA或两者的组合)&#xff0c…

浅谈 MySQL 的存储引擎(表类型)

什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。 我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据&#…

Ubuntu如何搭建Django与Flup和Nginx环境?

Ubuntu系统越来越多的用户开始使用,本文介绍的是搭建DjangoFlupNginx环境的过程。 首先我们必须明白这这3者在该环境下发挥的作用。 1.nginx:("enginex")是一个高性能的HTTP和反向代理服务器,作用和apache的类似。它可以处理一些静…

洛谷 1137 旅行计划

【题解】 拓扑排序DP即可。 1 #include<cstdio>2 #include<cstring>3 #include<algorithm>4 #include<vector>5 #define LL long long6 #define rg register7 #define N 2000108 using namespace std;9 int n,m,front,rear,q[N],f[N],in[N]; 10 bool v…

NOT IN、JOIN、IS NULL、NOT EXISTS效率对比

语句一&#xff1a;select count(*) from A where A.a not in (select a from B) 语句二&#xff1a;select count(*) from A left join B on A.a B.a where B.a is null 语句三&#xff1a;select count(*) from A where not exists (select a from B where A.a B.a) 知道以…

python ssl_Python3 ssl模块不可用的问题

编译安装完Python3之后&#xff0c;使用pip来安装python库&#xff0c;发现了如下报错&#xff1a; $ pip install numpy pipis configured with locations that require TLS/SSL, however the ssl module in Python isnot available. Collecting numpy Retrying (Retry(total4…

shell脚本 如何切换当前目录

问题&#xff1a; 是这么个情况&#xff1a;当前目录是/root/replace/ 我想在脚本a.sh中执行该目录下的一个子目录/root/replace/scripts/下的可执行文件run.out和b.sh脚本。但是这个可执行文件run.out的文件读写要求在/scripts下&#xff0c;而b.sh脚本则是以/scripts为当前目…

使用DynamoDBMapper扫描DynamoDB项目

之前&#xff0c;我们介绍了如何使用DynamoDBMapper或底层Java api查询DynamoDB数据库。 除了发出查询之外&#xff0c;DynamoDB还提供扫描功能。 扫描的目的是获取您在DynamoDB表上可能拥有的所有项目。 因此&#xff0c;扫描不需要任何基于我们的分区键或您的全局/本地二级…

vs python生成exe文件_使用VScode编写python程序并打包成.exe文件-文件夹变成exe

1. 下载vscode并安装 2. 配置Python环境 点击左下角的吃了图标&#xff0c;在弹出的菜单中选择extensions&#xff0c;在左上方搜索框内输入“Python”&#xff0c;可以看到好多Python插件&#xff0c;选择安装喜欢的Python插件&#xff08;配图两张&#xff09;。安装Python插…

如何清除主板CMOS

最近很多网友反映&#xff0c;对于清除主板CMOS&#xff0c;不是很了解&#xff0c;操作上也不明白&#xff0c;因此网站重新制作主板CMOS清除的过程&#xff0c;并以图文的形式制作&#xff0c;以便更加直观清楚。 CMOS(本意是指互补金属氧化物半导体存储嚣&#xff0c;是一…

ubuntu如何安装samba

1.samba安装sudo apt-get install samba2.修改smb.confsudo gedit /etc/samba/smb.conf 文件最后增加如下代码&#xff1a;[share] path /home/liunx/share available yes browseable yes public yes writable yes 4.进入home/liunx目录创建share文件夹mkdir /share …

文本处理工具AWK详解

awk简介 awk: 中文意思是报告生成器 能够根据我们输入的信息&#xff0c;将信息格式化以后显示&#xff0c;将定义好的信息以比较美观&#xff08;直观&#xff09;的方式显示出来出现比较早&#xff0c;继而出现了new awk&#xff08;nawk&#xff09;在windows上实现&#x…

安装12G内存读出内存条为3.45G的处理方法

在台式电脑上安装2个内存条&#xff0c;之前是4G的后来加安装了8G内存&#xff0c;本应该有12G但是在电脑上却显示只有3.45G内存为可用&#xff0c; 以下是处理方式&#xff1a; 1、确定两条内存都是可以用 2、在cmd 中输入msconfig 点击enter就可以入系统配置 然后点击引导…

顺序表的介绍与简单运用

1&#xff1a;解释与结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;一般情况下采用数组存 储。在数组上完成数据的增删查改。 顺序表一般可分为一下几类 1.1 静态顺序表 概念&#xff1a;使用定长数组存储元素。注意&#xff1a;这种是…

Fastest way to duplicate mongodb collection

db.myoriginal.aggregate([ { $out: "myCopy" } ]) db.runCommand({aggregate: "myOriginal",pipeline: [{ $match: {} }, { $out: "myCopy" }]});转载于:https://www.cnblogs.com/kevin1988/p/9877551.html

电脑显示链接网络正常但是不能上网,用某些软件会提示系统丢失libeay32.dll

电脑显示链接网络正常但是不能上网&#xff0c;用某些软件会提示系统丢失libeay32.dll,且可以ping通网关 按如下步骤可以重新正常上网&#xff1a; 1.在“开始”菜单找到“运行“ 2.然后在里面输入cmd 按”Enter“键 3.出现的命令提示框内输入“netsh winsock reset"按…

python做算法题优势_Python语言在科学算法中的优势

2019 年第 4 期 信息与电脑 China Computer & Communication 算法语言 Python 语言在科学算法中的优势 刘 瑞 &#xff08;辽宁师范大学海华学院&#xff0c;辽宁 沈阳 110000&#xff09; 摘 要&#xff1a; Python 是一种很有吸引力的语言&#xff0c;是一种面向对象且呈…

Java Spring IOC用法

Java Spring IOC用法 Spring IoC 转载于&#xff1a;http://www.cnblogs.com/flowwind/p/4772375.html在前两篇文章中&#xff0c;我们讲了java web环境搭建 和java web项目搭建,现在看下spring ioc在java中的运用&#xff0c;开发工具为Intellij Idea。 1.简介 IoC(Inversi…