思想总是相通的,且总是牛人们用来解决某些问题的——不是凭空想象出来的

[ 1223 查看 / 1 回复 ]

public static bool TryParse(string s, out int result);

看Int32这种 基元类型 身上的方法时,发现有这么一个方法(好像是C#2.0或者更靠后的版本的新特性)。这个方法的想法,感觉就跟 AJAX 的由来很像。调用这个方法,如果是通过 返回值 的方式,很明显是 ‘同步’的。。需要等这个方法返回之后,主调方法才能进一步执行。。

而这个方法很有意思。。考虑多线程环境,在双核的机器上,主调方法与该方法是在2个CPU上执行代码段。主调方法传入string s之后,二话不说可以继续执行他自己的代码,而不用关心 本方法 的生命周期。在主调方法执行的过程中,本方法会 回传一个 int的值的引用(是不是很像异步调用)。。而且,如果主调方法和 本方法 可以有比较长的一段 生命周期 大家是‘共存’的(而不是你死我活——同步调用就是你死后我才能活),那么从主调方法(函数调用处)可以看到,result这个值可以是不断变化的。

主调方法,等于是给了一个白盒子,要求 本方法 往盒子里面塞‘礼品’,而且 主调方法 始终持有这个盒子的引用。 本方法每次往这个盒子里面放东西(去改变result的值),主调方法理论上都是可以通过引用 敏锐 的察觉到——这是跟AJAX最大的不同。。AJAX由于是跨网络的链接——我们认为这是 短连接 ,不像方法调用是在同一个 应用程序域——也就是在同一个 CLR 上的,因此 方法调用 可以保持 长连接。AJAX虽然理论上‘貌似’始终持有引用,但那根线是虚的——毕竟这根线是通过 HTTP 给模拟搭建出来的。如果是 TCP 协议,则是有可能进行长连接的+——这也是 分布式调用 .net的Remoting和Java的RMI的真正核心。AJAX其实也不关心,本方法往那个 白盒 里面,究竟是先放一个苹果后放一个鸽子还是反之,那都不重要,重要的是最终结果——通过HttpResponse返回到Browser的是什么东西——那当然是最重要的。。最好是格式良好的Http协议,里面带有结构良好的 Html网页。如此,则完成了Ajax的真正使命。
TOP

如上的思想,其实有很多很多地方可以见到端倪。。比如我们现在每天都会用到的Web服务器+Asp.net引擎搭配。。

IIS Server拿到客户端的HTTP请求,他能负责的是.html,.htm这样的后缀的页面请求(通常都是静态资源)。但是遇到.aspx后缀名的请求,它是无能为力的,就请出好帮手 asp.net引擎。IIS与 asp.net的通信,其实也是这样一种思想。就是准备2个东西,一个in HttpRequest request,一个out HttpResponse response,主要递送到 Asp.net引擎的 IHttpHandler接口(确切的应该是传递到该接口某个实现了的接口中纯抽象方法的  override以后的方法)——每个aspx页面都继承了Page类,该类实现了IHttpHandler接口——典型的 多态性 的实现。这样,asp.net引擎就负责干活——吃进的是草,产出的是奶——他吃进的是Http相关的request,产出的是Http相关的response。。中间的过程,就是引入.net平台的原生语言C#这个主角。但是,这未必是必须的。。可以用vb.net自不必说,甚至可以使用php,java。。只要asp.net可以支持这样的语言转换,将http转到 java or php,并且可以让他们 RenderToHtml——IIS只能识别HTML,其他的一律不认识。。
TOP