Continuation Server是在一本叫做《Beyond Java》的书上面看到的。这本书写得还不错,只是前面几章略显的罗嗦了一点,反复的讨论着同一个主题。
后面的几章才开始转入主题,讨论了一些比较新的咚咚,例如ruby,rails,continuation server,metaprogramming。其他几个之前都接触过,所以也就算是看了个小结而已,而continuation server则是第一次听说,所以比较留意。他的理念也是比较有创意的。我们的web开发,一般都是以客户端作为主动的,客户端发请求,然后接收响应,然后再发请求...整个流程都是由客户端作推动方。这样的一个结果就是,一般的web框架都是把他们的控制器分成一个个的方法调用,客户端的请求就对应到这些方法调用当中。
continuation server的创新之处就是把这个逻辑反了过来,让服务器作为主动方,服务器发回响应,然后等待客户端输入之后,继续执行,然后发回响应...,整个流程是服务器通过发回响应进行推动。整个过程就像是函数调用那样,服务器发送响应就是函数调用开始,而用户发送请求就是函数的返回。要实现这个效果,就需要服务器端可以在收到请求之后能返回到之前的发送响应的后一语句。
这里的核心就是服务器端需要能够动态的获取运行栈,在发送响应前,先对当前的运行栈作一个快照,然后在响应到达时,重新从快照那里执行,这样就相当于实现了刚才所说的函数调用效果。使用continuation server之后服务器端就只需要一个方法调用,对应初始请求。
public void index(){
snap shot();
发送响应;
if(输入 = ...){
...
}else{
...
}
snap shot();
发送响应;
}
continuation server的工作就是在每次请求到达后,通过之前的快照值,返回到这个方法调用内部。