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模式:
}
網上的好文章,往後備用。