Jetty6.0提供了AJAX的服务器端的推的技术,而且采用的是JAVA非阻塞的I/O,可以保证"Thousands of users can be served with hundreds of connections”,在学习DWR2的时候,也有类似服务器的推技术,对于这种技术是基于HTTP1.1的长连接进行的,但是网上关于这个方面的资料不是很多,仅仅从理论的角度进行讲解,请教banq能否 通过一个简单的技术模拟下这种服务器的长连接(并不是轮询的方式),将服务器的数据推到客户端,并且不占用当前的请求线程,他们的实现机制是如何的?目前仅仅有感性认识,主要问题是服务器如何得知需要更新的客户。请bang详细阐述一下,谢谢
jetty服务器这种长连接Continuations 其实不是真正的长连接,应该叫'connection freezing', or 'request parking' 连接暂停或请求暂停。
对于PUSH推机制:对于Jetty6其实还是依靠AJAX的客户端主动请求的,改善的是:不需要AJAX客户端不断发出多次请求给服务器,以确定服务器端是否有响应。服务器端hold住ajax客户端第一次请求,如果没有业务结果,就不发出响应response,也就是说不关闭这次http连接,但是因为一个连接一个线程,你保持住一个请求就象保持一个线程一直运行,这是很浪费资源的。
传统socket模式都是一个connection一个线程,NIO可以通过事件机制再触发新线程,使得线程和请求可以分离,这样, Jetty就是利用NIO这个机制,保持住请求request对象,释放原来支持该请求的线程,让线程返回线程池,这样,如果业务处理有结果,Jetty就向客户端发出响应,否则一直保持直至timeout失效。
这个机制如果证明可行,会加入servlet 3.0新规范,到时所有Jee服务器都有这个功能。
所以,这个机制不是严格意义上的推机制,但是也可以对付大量频繁刷新请求,所以是一个改进。
至于推机制中服务器如何推,可以参考eda架构,这个是和我们平时做的JEE的SOA机制不太一样,至于如何推,可以使用线程提醒 观察者JDK 或JMS等等。
http://www.theserverside.com/news/thread.tss?thread_id=36594
http://docs.codehaus.org/display/JETTY/Continuations
Jetty
Jetty简介
Jetty是一个开放源码的HTTP服务器和Java serverlet容器。。
基本特色
相关链接
冰山上的播客
http://xinsync.xju.edu.cn/index.php/archives/category/prglang/java/jetty
posted on 2009-06-03 11:21
波 阅读(756)
评论(0) 编辑 收藏