server push&servlet asynchronous

本文详细介绍了Servlet 3.0中Asynchronous特性的工作原理及其如何提高服务器效率,尤其是在处理耗时请求时的表现。同时探讨了该特性与Comet、AJAX等技术的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天对server push 终于有了一个全面的了解,也纠正了一些之前在概念上的认识。
首先说comet概念,comet并不是一个framework,以前一直以为是个framework,今天才知道他是一个概念,一个没有标准的概念。每个vendor提供的解决方案不同。apache,jboss,grizzly都有各自的解决方案。这样在服务器移植的时候就会有很大的麻烦。幸好servlet3中的Asynchronous及时出现,他提供了一种通用(之所以通用是因为他是规范,各vendor必须实现它)的方式来实现push。(当然与各vendor提供方案不一样,但是它当然也属于comet范畴)。
servlet3中的asynchronous是对现有的servlet的一次升级,他可以返回一个不带response对象的响应,然后迅速释放链接。并将response对象及所对应的request对象放入一个AsyncContext对象里,然后启动线程。然后将线程由nio接管。所以线程可以很快回收。之后再某个特定的点向response写入东西。页面可以有所响应。
从上面对servlet3中的asynchronous的描述中可以看出,他并不是针对server push而开发的技术。要想了解他所能解决的问题,那就先和之前的servlet做一个对比。以前的servlet技术,在服务器接受到客户端的请求后,他会启用线程来处理这个请求,这个线程直到server给client做出响应后被回收,之后链接断开。假如说sever为了给client做出响应,要经过很耗时的计算,那么这个请求的链接及处理请求的线程将一直被占据。显然对整个网站的吞吐量都会造成负面影响。而servlet3中的asynchronous技术可以将请求的链接及处理的线程转换为相对cheaper的nio来处理,释放掉昂贵的链接及线程。
servlet3中的asynchronous其实对ajax的帮助很大,虽然asynchronous不依赖ajax也能发挥出他全部的作用。但是因为页面有ajax的存在所以页面的请求在不知不觉中比传统的page-by-page要多出许多,这就更需要系统提供更多的链接及线程,asynchronous显然可以胜任。
总结:servlet3中的asynchronous并不是为了与ajax配合而产生的,当然更不是为了push。但是他却可以很好的被他们利用。
其他资源:http://www.javaworld.com/javaworld/jw-02-2009/jw-02-servlet3.html?page=1
其他方案:在html5中提出的SSE规范以及WEB-SOCKET规范是从页面发起与服务器端建立长连接,并有消息触发的模型,也可以实现server push。但因为目前两个规范都处于draft阶段故暂时没有考虑(今天是2011-02-16)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值