不用服务器也能跑的框架-wojilu-续篇
首先,感谢各位看了上次那篇不用服务器也能跑的框架-wojilu
同时感谢指出文章中错误的各位朋友。我想大部分同志都已经了解了这篇文章的意思,不过对于一些刚刚认识IIS的朋友,有必要在写一文解释一下。【当然,如果我的认识有什么问题,请大家指出】
首先请看一下这篇博文对IIS的原理的解释:【感谢原作者的文章】IIS工作原理
摘录一段原文:
Http请求刚刚到达服务器的时候
当服务器接收到一个 Http请求的时候,IIS 首先需要决定如何去处理这个请求(NOTE:服务器处理一个.htm页面和一个.aspx页面肯定是不一样的么)。那IIS依据什么去处理呢?―― 根据文件的后缀名。
服务器获取所请求的页面(NOTE:也可以是文件,比如 jimmy.jpg)的后缀名以后,接下来会在服务器端寻找可以处理这类后缀名的应用程序,如果IIS找不到可以处理此类文件的应用程序,并且这个文件也没有受到服务器端的保护(NOTE:一个受保护的例子就是 App_Code中的文件,一个不受保护的例子就是你的js脚本),那么IIS将直接把这个文件返还给客户端。
能够处理各种后缀名的应用程序,通常被称为 ISAPI 应用程序(NOTE:Internet Server Application Programe Interface,互联网服务器应用程序接口)。虽然这 ISAPI 听上去还挺气派,也算是“应用程序”呢,但仔细看看它的全称就明白了:它实际上只是一个接口,起到一个代理的作用,它的主要工作是映射所请求的页面(文件) 和与此后缀名相对应的实际的处理程序。
理解宿主环境(Hosting)
从本质上讲,Asp.Net 主要是由一系列的类组成,这些类的主要目的就是将Http请求转变为对客户端的响应。HttpRuntime类是Asp.Net的一个主要入口,它有一个 称作 ProcessRequest 的方法,这个方法以一个 HttpWorkerRequest 类作为参数。HttpRuntime 类几乎包含着关于单个 Http请求的所有信息:所请求的文件、服务器端变量、QueryString、Http 头信息 等等。Asp.Net 使用这些信息来加载、运行正确的文件,并且将这个请求转换到输出流中,一般来说,也就是HTML页面。
下面画了个很简单的图,来看看IIS和浏览器的交互,只是简单的图形,大体的意思:
IIS大体干的活,就是看看你要什么,然后让具体的程序做点你要的东西给你。如果有一个jsp_isapi.dll的话,估计你可以用IIS来请求一个JSP的页面了。(感谢上次朋友的指正,JSP是Tomcat)。
然后看看wojilu的运行方式吧。
【浏览器将www.magicdict.com 转换为HTTP协议】Mock这个类就是干这个的,他将一个网址,模拟成了HTTP协议的标准格式,所以,wojilu可以跑在桌面上。
由于我们的要求就是一个ASPX,所以,我们也不需要IIS为我们选择处理ASPX程序了,ISAPI的工作,直接由wojilu系统接管了。 我们不需要选择,wojilu直接让wojilu的页面做成流程制作页面了。页面制作流程,其实就是wojilu完全控制的一套体系,里面有大量拼接HTML字符串的工作,这样的话,ASPNET也可以省略了。【你想象一下,如果来了一个请求,你可以让ASPNET系统做一个HTML页面,你也可以手动返回一个
<html><font color='red'>Hello Wordl</font></html>
字符串.如果你选择了后者,恭喜你,基本上ASPNET系统页面做成也被你跳过去了。
【当然,Session控制什么的,我不知道是IIS的机能还是ASP的机能,如果Session控制等等是IIS机能的话,可能完全摆脱IIS还有很多事情要做】
当然,完全摆脱IIS和ASP,这个很难很难。
演示里面,只是返回了一个HTML的文字列,最后还是需要浏览器来表示画面的。如果你只是为了抓取数据,可以不用浏览器。
其实想想看,浏览器,通过标准HTTP协议,向IIS要东西。当然,浏览器只要要到了东西,不管是谁给它的。如果你制作的程序能够满足浏览器的要求,IIS就没有什么事情可以干了。浏览器要一个HTML的文字串,你的东西能给它一个HTML的字符串,你的程序就完全可以代替IIS了。网络应用的全部就只有 Request和Response两个方法,其他都是浮云。