PythonWeb架构的发展
静态web与动态web
在静态WEB程序中,客户端使⽤WEB浏览器(IE、FireFox等)经过⽹络(Network)连接到服务器上,使⽤HTTP协议发起⼀个请求(Request),告诉服务器我现在需要得到哪个页⾯,所有的请求交给WEB服务器,之后WEB服务器根据⽤户的需要,从⽂件系统(存放了所有静态页⾯的磁盘)取出内容。之后通过WEB服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显⽰的效果。
由于这种应⽤不能与⽤户交互、⽆法显⽰个性化的内容,所以动态⽹页技术应运⽽⽣。
在动态WEB程序中,程序依然使⽤客户端和服务端,客户端依然使⽤浏览器(IE、FireFox等),通过⽹络(Network)连接到服务器上,使⽤HTTP协议发起请求(Request),现在的所有请求都先经过⼀个WEB Server 来处理,⽤于区分是请求的是静态资源还是动态资源。
如果WEB Server 发现客户端请求的是静态资源,则WEB服务器从静态⽂件系统中取出内容,发送回客户端浏览器进⾏解析执⾏。
如果WEB Server 发现客户端请求的是动态资源,则先将请求转交给 Web应⽤程序,由Web应⽤程序组织数据,最后把处理结果交给WEB服务器,之后通过WEB服务器将内容发送回客户端浏览器。
web服务器与web应⽤程序的接⼝
gateway interface 是 web server 和 web应⽤程序 之间的接⼝规范,这种接⼝规范规定了web服务器:
如何将 request 参数化后传递给 web应⽤程序,web应⽤如何将它的输出发送给 webserver,
以及如何调⽤ web应⽤程序。
CGI、FASTCGI、WSGI 都是web服务器 与 web应⽤程序的接⼝规范,如:
web Server + CGI + shell + DB
web Server + FastCGI + shell php + DB
web server + Serverlet + java + MVC
web Server + WSGI + Python + MVC
web应⽤程序的再抽象
随着web应⽤的动态化, 传统的静态web server对于动态内容⽆能为⼒,CGI技术⽤于⽣成动态内容。 但是CGI技术的性能很差, 主要是因为对于每个请求都要创建⼀个进程来运⾏cgi程序, ⽽进程创建的开销⽐较⼤, 严重拖慢了响应速度。随后fastcgi技术出现了, 为了解决cgi技术中存在的问题, fastcgi使⽤⼀种进程管理器, ⽤来维持⼀个进程池,提前创建进程,从⽽提⾼了响应速度。
webserver接口开发uWSGI 是⼀个 WSGI 协议的实现,包括四个部分:
实现了 uwsgi协议,与web server 通信
web server 内置⽀持协议模块:
application server协议⽀持模块: 实现了 WSGI,与 python 框架交互
进程控制程序: 为web request 的处理创建⼯作进程
为什么要隔离 framework 和webserver?
如果在nginx中直接⽤WSGI,那么 nginx线程中就要启动python解释器。通常最好在与主Web服务器不同的进程中运⾏Python。这样,Web服务器可以具有许多微⼩的线程,这些线程可以⾮常快地提供静态内容,⽽单独的Python进程⼜⼤⼜笨重,并且每个进程都在运⾏⾃⼰的Python解释器。
更灵活。开发⼈员可以从Green Unicorn切换到uWSGI,⽽⽆需修改实现WSGI的应⽤程序或框架。
易于扩展。⼀次为成千上万个动态内容的请求提供服务是WSGI服务器的任务,⽽不是框架,职责分离对于有效地扩展和分派Web流量很重要。
web框架
Web框架的作⽤主要是⽅便我们开发 web应⽤程序,HTTP请求的动态数据就是由 web框架层来提供的。没有框架时,实现业务逻辑要⾯对如何设计路由逻辑,数据如何访问, 视图如何设计等问题。
以MVC开发模式来说, 我们要实现MVC 这三个⽅⾯的各种细节。 每次开发⼀个新的app都有⼤量重复的⼯作要做。 这些重复的固定的⼯作与流程被抽象出来,每次只⽤开发相应的业务逻辑, ⼤⼤加快了web开发的速度。
参考
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论