ruby&python 从CGI 到 WSGI 到 Rack, 顺带Sinatra

长平狐 发布于 2012/08/24 10:07
阅读 1K+
收藏 4

本篇只是学习篇,我贴了一些阅读的学习链接,然后加上一些comments。

CGI

CGI让人感觉就是一个很简单的远程脚本调用。他的概念就是:我在服务器端有许多的脚本,这些脚本可以使用任何可执行语言编写(shell、ruby、perl。。。),然后用户通过url访问服务器,服务器会根据已有的url mapping找到对应的一个脚本,然后执行这个脚本。最后把脚本执行的结果按照既定的格式返回给用户。
由于脚本的多样化以及各种语言的强大功能,可以说CGI 能够快速开发,同时可以完成非常多的任务。
ps:最近刚在godaddy上面搞了一个host,发现其中使用了CGI,不过暂时不清楚他是怎么运作的。

WSGI

WSGI是python的cgi,这句话对了一半。WSGI是服务器(web服务器)与应用程序之间的一个 低级别接口,以提供可移植web应用开发的共同点。他是基于CGI标准来实现的,所以他可以套接到CGI上面。
其实WSGI就是服务器与应用程序中间的一个中间件,他对于服务器来说,就是应用程序,对于应用程序来说就是服务器,他在中间做一个中转,当然会做一些处理,把request和response做上一些修改。下面 这张图很形象的说明了整个结构,就是利用了装饰模式的实现。

Rack

Rack就是Ruby的WSGI,它也是在服务器与应用程序提供一个中间件。可以截获用户发来的请求和应用程序以既定形式返回的数据,然后作出相应的处理。比如说可以拿到一个用户的请求,然后验证用户的访问url是否有效,或者验证用户的身份等。作为一个中间件,rack的主要作用体现在通用逻辑和实际业务逻辑的分离,我们可以在rack中加入通用的逻辑,而无需在实际业务程序中添加类似的功能。而同时由于rack标准的普遍性,我们可以在几乎所有的主流Ruby web框架中使用符合按照rack标准开发的模块。而同时rack也为开发者提供了大量的api来简化开发。

Sinatra

Sinatra是一个为了用最小精力进行web开发的基于Ruby的 领域专属语言,也就是说Sinantra是一种语言,但是这种语言只能在特定的领域(ruby web开发)中使用。一般的书写方式就是:
require 'sinatra'

get '/' do
  'Hello world!'
end
意思就是如果访问url是/,也就是根目录,那么返回Hello world!
对于Sinatra的第一个链接中的问题,可以说,楼主使用了Sinatra的书写方式开发了一个精简的程序,而后面一位则是使用rack中间件方式来开发,两者其实是使用了两个并不对立的技术开发的。我们显然可以同时使用rack和sinatra的。




原文链接:http://blog.csdn.net/cherry_sun/article/details/7751452
加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部