tomcat servlet3初探

1 实现了http1.1的长连接功能,1.0是每次请求都会重新创建连接,响应后销毁连接

2 增加了Async Request Process,很适合用于分割容器线程池和业务线程池,AsyncContext作为衔接容器和业务的桥梁,可以基于此实现SEDA。也可以用于服务大量的ajax请求处理,另外开启线程池,针对ajax分配单独的资源如http://taojingrui.iteye.com/blog/548624

其他例子,均在说明,异步servlet可以提前让容器线程回收,让耗时的业务不影响整体的性能。

http://www.dev26.com/blog/article/255

http://www.cnblogs.com/hiddenfox/archive/2012/05/22/2512747.html

http://blog.csdn.net/id19870510/article/details/6180113

http://sunqi.iteye.com/blog/708823

http://blog.csdn.net/willfcareer/article/details/5728774

3 增加了comet技术,可用于服务端推技术和客户端长轮询,一般是在长连接的业务场景下,客户端和服务端会来回多次请求-响应。

comet的方式发展:

  • meta 刷新,浏览器会定时刷新整页,用户体验极差。
  • ajax短轮询,用XMLHttpRequest定时局部刷新页面,用户体验有提升,但是会产生大量的请求,可能会压垮服务器。并且可能大量的请求是无意义的。
  •  ajax长轮询,和短轮询的区别在于服务器的响应时间,每个连接会保持较长的时间,可能是几秒,也可能是数分钟,服务器才进行响应。一旦有服务器有数据就绪,就会实时推送到客户端,并关闭连接。
  • ajax长轮询变体,streaming comet。和长轮询的区别在于,当数据推送到客户端时,连接不会关闭,下次轮询可以复用。这种方式的缺点在于并非所有的浏览器都能完美支持。
上面的长轮询方式,尽管同步io也能实现,但是性能方面会比较差,因此在servlet容器中,如tomcat 和jetty都使用nio来实现这两种技术。

http://www.ibm.com/developerworks/cn/web/wa-cometjava/

http://tomcat.apache.org/tomcat-6.0-doc/aio.html

放翁博客有很多关于这方面的论述

blog.csdn.net/cenwenchu79

猜你喜欢

转载自hill007299.iteye.com/blog/1744486