Danfo Yam

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  5 Posts :: 1 Stories :: 6 Comments :: 0 Trackbacks

    前段时间做了一个项目,从仪器上采集数据(仪器会源源不断的发送数据)并将数据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文件
源代码
posted on 2009-06-30 16:39 Danfo Yam 阅读(1557) 评论(3)  编辑  收藏

Feedback

# re: 发布CometQueue 2009-06-30 20:11 过河卒
关注这个东西,最近也在考虑这样的功能.  回复  更多评论
  

# re: 发布CometQueue[未登录] 2009-06-30 23:13 zy
代码倒是看懂了!期待博主把做这个组件的原因,以及相关介绍再说详细点!  回复  更多评论
  

# re: 发布CometQueue 2009-07-01 13:28 找个美女做老婆
Java高手群:Java乐园,群号:28840096 Java乐园网站:http://www.javaly.cn 欢迎Java高手加入,大家一起交流经验,相互学习,共同进步  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: