Jetty Continuation机制

来源:互联网 发布:网络性能指标并发 编辑:程序博客网 时间:2024/05/16 10:56

Continuation机制

Continuation机制是Jetty用于更好的支持异步Servlet的机制。

首先简要介绍一下技术应用的背景。异步请求是指当客户端发送一个请求到服务器的时候,客户端不必一直等待服务器的响应,例如Web 2.0中的Ajax(Asynchronous JavaScript and XML)技术、JDBC连接池等,当服务器端响应返回时,客户端利用一个 Javascript 函数对返回值进行处理,以更新页面上的部分元素的值而不必刷新整个页面,从而带来更好的客户体验。但很多时候这种异步事件只是在很小一部分的情况下才会发生,那么怎么保证一旦服务器端有了响应之后客户端马上就知道呢,我们有两种方法来解决这个问题,一是让浏览器每隔几秒请求服务器来获得更改,称之为轮询。二是服务器维持与浏览器的长时间的连接来传递数据,长连接的技术称之为Comet。轮询的主要缺点是产生了大量的传输浪费;而如果使用Comet技术的话,客户端和服务器端之间必须保持一个长连接,一般来讲,服务器端的一个Servlet会独占一个线程,如果有大量客户端维持长连接,会给服务器端的处理能力带来很大的挑战。

针对上述情况,Jetty利用Java语言的非堵塞I/O技术来处理并发的大量连接。具体说来,Jetty实现了一个 基于java.nio API 的SelectChannelConnector,允许它维持每个连接开放而不用消耗一个线程。当连接挂起时,Connector将请求维持在未决 Continuations队列里,用来服务请求的线程返回给TheadPool,这样,该线程又可以服务于其他请求。暂停的请求停留在未决 Continuations 队列里直到指定的过期时间,或者在它的Continuation上调用resume()方法。

0 0
原创粉丝点击