Jetty Continuation 其实是一种异步Http技术,他能让Http链接挂起,直到超时或者异步事件发生时,Http链接能够恢复。Jetty Continuation 的技术应用起来不复杂,有几个关键的API,和两种设计模式:设计模式
API:
(1) 获得Continuation
Continuation continuation = ContinuationSupport.getContinuation(request);异步
(2) 挂起Http请求
void doGet(HttpServletRequest request, HttpServletResponse response)
{
...
continuation.setTimeout(long); // 可选:设置continuation 超时
continuation.suspend();
...
}函数
(3) 恢复Http链接,一旦异步事件发生了,能够经过异步事件的回调函数来恢复Http链接
void myAsyncCallback(Object results)
{
continuation.setAttribute("results", results);
continuation.resume();
}spa
(4) 完成Http链接,一般用在异步事件回调函数里返回Http Response时:
void myAsyncCallback(Object results)
{
writeResults(continuation.getServletResponse(), results); // 将异步事件结果result,经过Response返回客户端
continuation.complete();
}设计
(5)注册异步事件处理器
myAsyncHandler.register(continuation);blog
(6)监听continuation事件
void doGet(HttpServletRequest request, HttpServletResponse response)
{
...
Continuation continuation = ContinuationSupport.getContinuation(request);
continuation.addContinuationListener(new ContinuationListener()
{
public void onTimeout(Continuation continuation) { ... } // 超时事件
public void onComplete(Continuation continuation) { ... } // 完成事件
});
continuation.suspend();
...
事件
}get
两种设计模式:Suspend/Resume模式,Suspend/Continue模式:
(1) Suspend/Resume模式:回调函数
} it
(2)Suspend/Continue模式:
}
网上的好文章,往后备用。