`
tyny
  • 浏览: 74245 次
  • 性别: Icon_minigender_1
  • 来自: 黄冈
社区版块
存档分类
最新评论

一、学习笔记django之wsgi

 
阅读更多
    wsgi(Python Web Server Gateway Interface)服务器网关接口,是Python语言定义的web服务器和web服务程序或者框架之间的一种简单而通用的接口。
    谈到wsgi,就不得不提到cgi(Common Gateway Interface/CGI)通用网关接口,因为没有经过那个用cgi写网络程序的年代,只能从当前的一些模块猜测一下当时的情形,有空再去了解了解。
   首先从通信的角度来看看网络web程序的流程。
    http服务器是一个在一个端口监听请求的程序。暂时不考虑现有web服务器的复杂性,假如是自己需要写这么一个程序,首先得写上一个通信服务器程序,在指定端口(通常是80)端口监听请求,由于是web程序,所以客户端通常还是使用浏览器来完成,于是乎,最简单的通信程序是通过浏览器向指定ip和端口发送请求。


 
    在上面的简单的实例中,我们每次发送请求,如果不进行数据处理,每个端口只能负责一件事情,如果需要完成更多的功能,就需要诉web服务器根据我们的“要求”做不同的服务,怎么办呢?首先得告诉web服务器要做什么,同时需要给他传递相应需要的参数。告诉web服务器做什么,常用方法就是url地址,当然用查询字符串也可以,不过建议用url地址来区分。至于服务需要的参数信息可以通过查询字符串或者form传递(如果不是web服务器,而是自己的通信程序,怎么定义都行,只要你能解析就行,当然采用通用的格式最好,这里因为客户端就是浏览器,需要遵循http协议)。服务器端该怎么办呢,当然根据不同url选择不同的服务不同的处理。从面向过程来看,基本每种请求差不多一个处理函数,然后使用传说中的swich(字典映射也行,其实正则判断也不错,而且现在流行的mvc的框架的url处理模块基本都是类似的处理方法),即需要服务器具备通常的分发功能,即根据不同的url传递相应的参数调用不同的服务,然后返回处理结果。


 
    经过上面的处理,我们的服务器可以具备简单的逻辑处理,比如处理一些查询任务等等。但是和我们通常理解的web服务器有点不同,谈论web服务器基本都是谈论并发、吞吐量、安全、稳定等通信问题,很少有人把web服务器和数据业务混在一起。而且从我们经常使用的web服务器来看,貌似基本都是c和c++这中底层语言写的服务器居多(apache,iis,nginx,lighttp),当然tomcat和jetty这种用java的。从专一的角度看,通信处理关心的主要是通信过程。通信服务器基本不关心里面传输的是什么数据,而是关心数据的安全和完整性,同时保证吞吐量、并发等问题。谈到这,基本也可以判断处理具体数据的业务是独立与服务器。事实也是如此。
    数据业务的处理,简单的可以利用文件系统来完成,如果想偷懒,仅仅根据服务器的请求地址转换成相对文件地址,然后读取返回回去即可,其实简单的静态页面就可以这么做。不过貌似没人愿意经常去改web服务器,同时web服务器也不希望被修改。所以web服务器基本提供扩展。他指定一个调用方式,指定接口参数,然后让开发数据业务系统的人把自己的扩展放进去(其实很多成熟的第三方,毕竟这个东西是可以公用),web服务器调用自定义的扩展即可(不好意思对于linux和win32里面c的跨程序调用不是很熟),对于其他的c#、java自动装载还是很容易的。这里知道有这个就行。不过对于java的web服务器没仔细研究过,不过从功能拉开,他可能还包括实现了java的servelet标准,而对于apache、iis、nginx等,他们基本不关注具体的业务数据,所以可以简单理解,能从他们那里得到的基本是原生态的http请求(当然是格式化为http)。所以如果自己写扩展,web服务器指定的回调或者其他格式处理方式必定会有几个包括http请求基本参数的参数。暂且就当这种接口就是一组函数定义及其相应的数据结构,实际也差不多。扩展接口实现里面可以访问到请求地址等http一系列参数,我们可以根据这些参数来处理实际的业务。


 
    但是随着最近几年,各种语言相继出现,而服务器基本还是c/c++的市场,如果是c/c++扩展,问题倒不是太大,但是为使用一种web服务器来修改自己的业务处理系统,这种耦合性似乎太过,这种问题在其他的语言更甚。同时现在处理数据业务的系统很少用c/c++来处理了,或者至少页面处理这块,基本很少见c/c++。所以怎样保证现在成熟的web服务器可以应用在这些相对比较新的语言或者框架上面,或者说可以让新的语言或者框架可以使用这些成熟稳定的web服务器,这是个很重要的事情。最简单的方式即是适配,即每种语言都定义一套自己web开发的交互规范。这种规范仅仅限于语言自己的特征和开发习惯,他在某种程度上可以认为和web服务器无关(当然还是得遵循基本的http和web开发的习惯)。如果需要使用某种服务器,仅仅需要开发一个介于语言或者框架与web服务器之间适配程序或者中间件。这样,无论语言或者框架和web服务器怎么发送变化,他们都可以独立的发展,仅仅可能需要修改他们之间的适配器中间件。自己觉得wsgi就是python自己定义的一套python语言web开发的标准,如果需要在apache、iis或者nginx等服务器上使用,需要相应的适配中间件。当然可以自己开发一个简单的中间件,只要满足wsgi的标准即可。下节可以简单的看看wsgi的简单应用。


 
引用

  • 大小: 5.3 KB
  • 大小: 15.9 KB
  • 大小: 31.9 KB
  • 大小: 48.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics