发布CometQueue

前段时间做了一个项目,从仪器上采集数据(仪器会源源不断的发送数据)并将数据 push web browser 上,由于要保证能够离线操作,采用在客户端电脑上部署一个嵌入小 jetty 服务器的方案,因此不能够安装 AMQ 来实现 push 的功能 (AMQ 太大 ) ,同时要保证仪器采集的数据不会丢失,导致不能使用 jetty continuations( 丢失数据频繁 )

首先来看段 js代码:
function  ajaxHandler() {
    
if (request.readyState == 4{  // If the request is finished
        try{
            
if (request.status == 200){  // If it was successful
                document.getElementById("time_div").innerHTML = request.responseText;
                sendRequest();
            }

            
else{  
                
//time
                setTimeout("sendRequest()",5000);
            }

        }
catch(e){
            setTimeout(
"sendRequest()",5000);
        }

    }

}

    此时的常连接实际是个虚假的长连接,是以反复的与 servlet 建立连接并读取数据而实现的。而这种方式,当 servlet 端正源源不断的往 browser 段传输数据时, browser 会有一部分时间消耗在建立连接、处理数据、关闭连接的过程中,因此导致 servlet 传输的数据会丢失 .

    因此做了一个Comet Queue组件,能够实现以下目标:
    1.    代码少,建立在spring

    2.   
对于每个http session创建一个独立的session, 这些session有自己的生命管理周期,当长时间没有服务请求这些session时,会自动被注销.

    3.   
数据产生者发送数据给订阅者,保证每个请求都能拿到自己会话中的数据,而不会丢失。
这样一个小功能,适合在对comet传输的数据要求准确性较高的要求中使用,他可以针对每一个http session创建一个session,将session保存在池中。一方面,数据产生者产生数据时,往池中的每个session添加数据;另一方面,数据消费者从自己的session中取出数据。这样就保证了数据不会丢失。

架构蓝图如下图所示:


暂时先将Comet Queue的代码与jar上传,文档将逐渐补齐.

你可能感兴趣的:(职场,休闲)