Comet工作原理

1.概念
Comet是通用术语,描述协议和为浏览器提供可行且可拓展的低延迟数据传输实现的集合。目标包括随时从服务端向客户端推送数据,提升传统ajax的速度和可拓展性。
2.工作原理
Comet通过更智能的长连接管理和减少每个连接的服务器资源,Comet相对于传统web服务,,更易于提供更多的同步连接,客户端与服务器之间数据传输更快。相对于客户端,采用的技术有轮询,长轮询,永久帧,XHR流和websocket.

  • 轮询:网站每x毫秒发出一个请求来检查是否有更新需要呈现在用户页面上。
setTimeout(function(){xhrRequest({"foo":"bar"})},2000);
function xhrRequest(data){
   var xhr = new XMLHttpRequest();
   xhr.open("get","foo.php",true);
   xhr.onreadyStatechange=function(){
     if(xhr.readyState == 4){
     //处理服务器返回的更新
     }
   }
}
  • 长轮询
    即浏览器发送一个请求到服务器,而服务器在有可用的新数据时才响应。服务端要保持一个所有未响应请求和它们对应连接的大集合。服务端通过返回Transfer-Encoding:chuncked
    基本长轮询例子:
    function longPoll(url,callback){
    var xhr=new XMLHttpRequest();
    xhr.onreadystatechange=function(){
       if(xhr.status==4){
          //发送另一个请求,重新连接服务器
          callback(xhr.responseText);
          xhr.open('GET',url,true);
          xhr.send(null);
      }
     }
     //连接到服务器以打开一个请求
     xhr.open('post',url,true);
     xhr.send(null);
   }
  • 永久帧
    方法是打开一个隐藏的iframe,请求一个基于HTTP1.1块编码的文档。
    function foreverFrame(url,callback){
      var iframe = body.appendChild(document.createElement("iframe"));
      iframe.style.display="none";
      iframe.src=url+"?callback=parent.foreverFrame.callback";
      this.callback = callback;
    }
  • XHR流
    xhr流是通过一个标准的XMLHttpRequest获得的,但能够在onreadystatechange事件中readyState为3时去访问服务器发送的数据(在响应完成之前),这样即无需等待连接关闭就可以操作数据。但IE不支持该方法。
    Comet通信的连接只允许服务器向客户端推送消息,没有达到双向连接。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值