`

Jetty7 Continuation 学习(一)

    博客分类:
  • Java
阅读更多
Jetty7发布了,Jetty7支持servlet 2.5,且对Jetty6做了很大的重构,使之更合理更高效。
Jetty的Http异步处理模式,包括Jetty HttpClient(异步的HttpClient),Jetty Continuation(异步的Http Request/Respoinse),都是很吸引人的技术,有很多很好的应用,比如在线聊天室,实时股票行情表,异步Ajax代理等等,都可以用Jetty的异步处理模式来实现。
趁Jetty7的到来,赶紧享受一下这道技术美味。
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();
}

(4) 完成Http连接,通常用在异步事件回调函数里返回Http Response时:
void myAsyncCallback(Object results)
{
    writeResults(continuation.getServletResponse(), results); // 将异步事件结果
result,通过Response返回客户端
    continuation.complete();
}
(5)监听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();
    ...
}

两种设计模式:Suspend/Resume模式,Suspend/Continue模式:
(1) Suspend/Resume模式:
void doGet(HttpServletRequest request, HttpServletResponse response)
{
     // 如果我们需要异步方式得到一个result,并放入request中
     Object results = request.getAttribute("results");
     if (results==null) // 如果异步处理尚未返回结果
      {
       final Continuation continuation = ContinuationSupport.getContinuation(request);
 
       // 判断是否超时
       if (continuation.isExpired())
       {
         // 返回超时Response
         sendMyTimeoutResponse(response);
         return;
       }
 
       // 挂起HTTP连接
       continuation.suspend(); 
 
       // 注册一个异步事件处理器
       myAsyncHandler.register(new MyHandler()
       {
          // 异步事件
          public void onMyEvent(Object result)
          {
            continuation.setAttribute("results", results); // 传送results
            continuation.resume(); // 恢复连接
          }
       });
       return; // or continuation.undispatch();
     }
 
     // 连接恢复后返回结果
     sendMyResultResponse(response,results);
}

(2)Suspend/Continue模式:
void doGet(HttpServletRequest request, HttpServletResponse response)
{
     final Continuation continuation = ContinuationSupport.getContinuation(request);
 
       // 判断是否超时
       if (continuation.isExpired())
       {
         // 返回超时Response
         sendMyTimeoutResponse(response);
         return;
       }
 
       // 挂起HTTP连接
       continuation.suspend(response); // response被包装
 
       // 注册一个异步事件处理器
       myAsyncHandler.register(new MyHandler()
       {
          // 异步事件
          public void onMyEvent(Object result)
          {
            sendMyResultResponse(continuation.getServletResponse(), results); // 通过response返回results
            continuation.complete(); // 完成
          }
       });
     }
}
分享到:
评论

相关推荐

    jetty-continuation-8.1.8.v20121106-API文档-中文版.zip

    赠送jar包:jetty-continuation-8.1.8.v20121106.jar; 赠送原API文档:jetty-continuation-8.1.8.v20121106-javadoc.jar; 赠送源代码:jetty-continuation-8.1.8.v20121106-sources.jar; 赠送Maven依赖信息文件:...

    jetty-continuation-7.4.2.v20110526.jar

    jetty-continuation-7.4.2.v20110526.jar jetty 服务jar包

    jetty-continuation-8.1.8.v20121106-API文档-中英对照版.zip

    赠送jar包:jetty-continuation-8.1.8.v20121106.jar; 赠送原API文档:jetty-continuation-8.1.8.v20121106-javadoc.jar; 赠送源代码:jetty-continuation-8.1.8.v20121106-sources.jar; 赠送Maven依赖信息文件:...

    Jetty cometd(Continuation)学习笔记

    Jetty cometd(Continuation)学习笔记,自己用的,别人那down的网页

    jetty相关的全部jar包

    jetty-security-9.4.8.v20171121.jar,jetty-io-9.4.8.v20171121.jar,jetty-continuation-9.4.8.v20171121.jar,jetty-client-9.4.8.v20171121.jar,jetty-jmx-9.4.8.v20171121.jar,jetty-plus-9.4.8.v20171121....

    jetty-continuation-9.2.9.v20150224.jar

    java运行依赖jar包

    jetty 8及依赖包

    这个压缩包包含Jetty 8版本的实现及其依赖库,是学习和理解Jetty工作原理,尤其是NIO(非阻塞I/O)和Servlet容器实现的宝贵资源。 Jetty 8在设计时特别强调了性能和可扩展性,它使用了Java NIO(New I/O)API来处理...

    jetty7.4.2

    这个版本(7.4.2)是Jetty 7系列的一个维护版本,它包含了性能优化、错误修复和可能的新特性。 1. **Jetty简介**: - Jetty是由Mortbay Consulting开发的,它是一个完全符合Java Servlet和JSR-315(Java EE 6 Web ...

    jetty-continuation-9.2.15.v20160210.jar

    java运行依赖jar包

    Jetty入门学习资料

    【Jetty入门学习资料】 Jetty是一个轻量级、高性能的开源Servlet容器,它由Java编写,以JAR包形式提供API,便于开发者将其轻松集成到Java应用中。Jetty自1995年创立以来,已被众多知名项目如Apache Geromino、JBoss...

    jetty-continuation-9.2.17.v20160517.jar

    java运行依赖jar包

    jetty-io-8.1.8.v20121106.jar

    Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立...

    jetty-continuation-7.6.10.v20130312.jar

    java运行依赖jar包

    jetty-distribution-9.4.12.v20180830

    Jetty由Eclipse基金会维护,是Java社区中的一个重要组件,尤其在嵌入式系统和微服务领域中备受青睐。下面我们将深入探讨Jetty的核心特性、与Tomcat的对比以及如何使用。 1. **Jetty的核心特性** - **轻量级**:...

    jetty-io-9.4.43.v20210629.jar

    Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立...

    jetty-client-9.4.43.v20210629-API文档-中文版.zip

    赠送jar包:jetty-client-9.4.43.v20210629.jar; 赠送原API文档:jetty-client-9.4.43.v20210629-javadoc.jar; 赠送源代码:jetty-client-9.4.43.v20210629-sources.jar; 赠送Maven依赖信息文件:jetty-client-...

    jetty-continuation-8.1.15.v20140411.jar

    java运行依赖jar包

    jmeter测试相关jar包

    org.eclipse.jetty.continuation_9.1.1.v20140108.jar org.eclipse.jetty.continuation.source_9.1.1.v20140108.jar org.eclipse.jetty.deploy_9.1.1.v20140108.jar org.eclipse.jetty.deploy.source_9.1.1.v...

    jetty-hightide-8.1.15.v20140411.zip

    7. **IDE Integration**:对于Eclipse和IntelliJ IDEA这样的集成开发环境(IDE),Jetty有专门的插件,便于开发者在IDE内部直接调试和运行Jetty应用。 此压缩包的文件名列表"jetty-hightide-8.1.15.v20140411"暗示...

Global site tag (gtag.js) - Google Analytics