Servlet3.0---异步支持

1.servlet2.5中,页面发送一次请求,是顺序执行,即使在servlet里的service中开启一个线程,线程处理后的结果是无法返回给页面的,servlet执行完毕后,response就关闭了,无法将后台更新数据即时更新到页面端

2.现在后台“推”是怎么实现的
   2.1定时发送请求,页面有刷新,不好友
   
   2.2Ajax 轮询,然后通过js更新页面数据
    相比前者虽然友好,访问量太大时,服务器会增加压力,小型应用可以考虑用

   2.3反向Ajax(Comnet)
      利用Http1.1长连接的特性,也是通过轮询,但是每次发送请求不会立即返回,而是等待服务器有数据时才返回或者没有等到数据而连接超时返回,相比于ajax轮询,减少了服务端压力,但一个缺点,不是所有浏览器都支持。

3.servlet3.0中提供了异步支持,当数据返回页面后,request并没有关闭,当服务器端有数据更新时,就可以推送了



Servlet3.0是Tomcat7出现的新特性,而异步处理是servlet 3.0的最重要的特征。 
  在Servlet 3.0之前,通过Servlet执行比较耗时的任务时,Servlet线程会被阻塞,直到所有的处理完成后才能得到响应。如果服务器的请求链接很多,它将达到最大Servlet线程限制,后续的请求被拒绝出现连接错误。虽然这种同步问题可以用特定的方案解决,比如Tomcat 的 Comet、WebLogic 的FutureResponseServlet 和 WebSphere的Asynchronous Request Dispatcher。这种特定容器的解决方案的问题在于,在不改变应用程序代码时不能移动到其他Servlet容器。 
  而Servlet3.0提供标准的方式异步处理Servlet的同时增加异步Servlet支持。这样在Servlet API 3.0实现成为主流后,解决方案就变得更加简单、标准化且优雅。 
  2 异步Servlet实践 
  2.1 异步Servlet实现 
  本实践在Tomcat 7.0,JDK1.7环境下,基于eclipse 3.7集成开发环境下来搭建实践工程。 
  (1)配置 
  配置Tomcat采用Servlet3.0,有两种配置方式:一种是注解式,一种是修改web.xml配置,我们采用了注解式。 
  (2)异步Servlet实现流程 
  启动一个异步的Servlet处理过程,映射为异步上下文对象; 
  对这个上下文对象加入一个监听; 
  设置一个超时时间,终止异步过程; 
  创建执行业务逻辑的工作线程池; 
  将异步上下文放入线程池执行业务逻辑。 
  2.2 异步Servlet测试 
  实践采用Apache的JMeter测试工具,对项目中使用异步Servlet方式的的并发请求处理能力进行测试,同时与原有Servlet方式进行对比分析。 
  在相同测试服务和模型情况下,两种方式测试的统计结果如下: 
  原Servlet: 
  异步Servlet: 
  从以上结果可以看出,异步Servlet平均性能有一点提升,但提升不大,即整体性能受限于请求/响应的完整处理时间,跟是否采用异步方式无关。但偏离数据大幅度缩小,表明采用异步Servlet后,服务器的线程调度能力得到很大改善,响应处理能力加强。 
  3 测试结果分析 
  (1)经过对比分析,可以确认Tomcat对于Servlet当前请求的处理,不论是否采用Servlet3.0写法,都是一个请求对应一个响应,标准的协议处理模式。 
  (2)从并发的角度看,Servlet3.0的异步处理能力,不是针对同一个用户提交的请求,而是针对大量用户请求提交到服务端后的处理效果。其核心就是Servlet对象能够快速返回,接收其他用户连接上的请求,从而减少Servlet对象的创建/销毁在性能上的开销,避免因对象过多造成达到Servlet最大线程限制而可能的拒绝服务。在同样大数量并发请求场景下,异步Servlet对服务器稳定以及处理性能提升很有帮助。 
  (3)当业务逻辑处理的返回值跟本次请求所需要的返回值不相关,即可以立即返回响应而不需等待业务逻辑处理结果时,用Servlet3.0则将对整个处理性能有一个质的飞跃。 
  4 实践总结 
  通过实践分析,对于Servlet3.0的使用,需要根据具体的场景和服务器能力设计来权衡使用。该解决方案非常适合于某些应用场景,比如说通知类、日志类服务等,他们的执行与请求/响应是解耦的。而对于需要等待数据库查询完成,或者需要明确获得本次处理结果,才能返回响应处理场景来说,这种方式就没有什么必须性了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东境物语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值