当前位置:C++技术网 > 精选软件 > 云平台开发架构分析系列:16 Nginx+uWSGI+webpy服务器架构原理3

云平台开发架构分析系列:16 Nginx+uWSGI+webpy服务器架构原理3

更新时间:2017-06-30 15:26:02浏览次数:1+次

        在《云平台开发架构分析系列14:Nginx+uWSGI+webpy服务器架构原理1》和《云平台开发架构分析系列15:Nginx+uWSGI+webpy服务器架构原理2》文章中,分别讲解了Nginx服务器和uWSGI服务器。Nginx服务器处理静态网页,而uWSGI处理动态网页,两者都是高性能的服务器,动静配合,可以将性能发挥到最好。

        本篇从uWSGI到webpy建立通路,讲解HTTP请求如何到达web应用程序来处理的。webpy是web框架,还不是最终的处理阶段。我们在webpy的框架下,写的各种处理请求的python脚本文件,就是最终的处理http请求。

        当nginx将http请求发送给了uWSGI后,uWSGI做了一些处理,可以进一步将参数封装,让编程更加方便。然而uWSGI还是不直接处理业务。不过每一步的包装,都会让编程更加方便快捷。

        WSGI , 它定义了:web应用(或者web框架)与 web服务器交互接口(WSGI)。而uWSGI就是一个支持WSGI规范的web服务器。把web应用部署到uWSGI中,当 uWSGI 接受到请求时,会按照WSGI定义的接口调用 web 应用处理。其他网关协议定义也差不多,毕竟处理的东西是同一个东西。

        uWSGI会把接收到的请求按照指定协议解析,然后把解析的结果(譬如:HTTP各请求头数据)设置到environ变量中,接着按照WSGI规范回调web应用(uWSGI默认回调application函数,并且传递environ和start_response两个参数),最终web应用开始处理请求(各种数据库查询,各种函数调用,业务功能处理)并把结果返回给uWSGI。

        可以看出,uWSGI是在处理好http请求的相关信息后,会去调用一个回调函数。将一些信息通过函数参数传进去,当然也有全局变量。这个函数是谁提供的呢?就是web应用程序提供的。uWSGI服务器提供好回调函数,只要web应用程序按回调函数的相关要求来对接,就可以支持uWSGI服务器了。

        有了uWSGI的处理,我们现在做的编程开发,就是常规看到的web程序开发了。这一层次的开发是很高的层次了。然而如果要你开发一个网站,仅仅这样,怕是不够吧。比如一个网站的业务是很大的,如果每一个请求都基于最基本的uWSGI传递过来数据来处理,开发量有点大哦。还有一些基本的解析工作,我们还是需要进一步包装的,这样让web开发可以更加简单,更加专注于业务,比如制作网页的UI、做好页面的互动体验,做好页面的业务内容展示等等。而不要花太多的精力在底层的参数的处理。所以这就是web框架产生的原因。

    3.webpy

        如果说你只是想提供Restful api,不做很多的网页后台交互,而是让前端js通过api来在前端交互,那么后台就可以简单很多。网页都是固定的,或者是动态变化的。这一类网站适合企业网站。而对于新闻网站,就不太适合。因为有大量的网页不断的生成,不可能通过前端脚本来动态生成很多页面。更多的是后台生成好页面,然后传回给浏览器。这样的话,我们就需要定义好各个页面的样式,做成页面模板,这样只需要更新数据,就可以按照一个固定模板生成界面统一的页面。

        当然,我们这个项目是一个管理后台,所以页面都是固定的。所以不需要复杂的模板,就选用了webpy。webpy是一款精简强大的web框架。有了这个框架,我们就可以不用直接处理uWSGI传递过来的数据。web框架做了很多基础的工作,最后我们就只要写好每一个网页相关的代码,页面以外的基本代码都不用处理了。

        我们再缩小范围,其实我们听说的web开发,更多的是属于在web框架这一层次的开发,如html、css、js等层面的开发,注重业务逻辑的处理,隔离与底层的编程。当然底层的开发也是有人做的。

        对于python的web框架还有很多,全面的web框架有django,适合CMS系统,如门户网站,内容网站等。因为它有网页模板等支持。当然还有flask等等。具体的模板,就是你做web开发需要学习的,也是学习的最多的。可以这么说,很多从事web开发的程序员,就连web框架本身都没有玩转,就更不用说底层的东西了。另外,因为底层的东西,一旦写好,基本上都不需要动什么了,配置一下就好了。所以,底层的技术实现,不需要web程序员了解,所以他们也没有这个动力了。如果想成为大神,那么最好要深入学习一下。web程序员至少应该深入到http协议。这是web开发的最根本。

        而网络编程则由更宽广的选择,如HTTP、FTP、SSH、Socket。前面三个都是应用层协议,你可以基于这些协议做上层的开发,HTTP就被我们成为了web开发。FTP可以开发出客户端,方便文件传输。SSH可以开发出来Linux终端。而Socket则是基于更底层的开发,属于传输层的,有TCP、UDP等。那么这个开发应用更广,自不必说。

        所以,我们对于网络编程和web编程的感觉大概就是这样,web编程则限于http方向上,而网络编程则包含了web开发,还有更多的东西。而服务器编程,则从服务器本地程序、到网络编程、到各种应用层协议的支持等等。