发布CometQueue

发布CometQueue

    前段时间做了一个项目,从仪器上采集数据(仪器会源源不断的发送数据)并将数据pushweb 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上传,文档将逐渐补齐.

所需jar文件
源代码

你可能感兴趣的:(发布CometQueue)