博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Comet技术浅论
阅读量:5237 次
发布时间:2019-06-14

本文共 1394 字,大约阅读时间需要 4 分钟。

1.如何实现一个轮询?

function getMessage(url,callback){ var XHR=new XMLHttpRequest(); XHR.open('get',url,true); XHR.onreadystatechange=function(){   if(XHR.readyState==4){      //do something      if(callback){         callback(XHR.responseText);      }   } }; XHR.send();  setTimeout(function(){getMessage(url,callback),2000);//采用递归的方式达成轮询效果}setTimeout(function(){getMessage(url,callback),2000);//采用递归的方式达成轮询效果

缺点:对于即时发送即时得到结果的短轮询,这是一种不错的选择,但是如果服务器不会立即响应请求,那就会产生不好的效果,是请求堆积,给服务器增压。

2.所以长轮询应运而生

function getMessage(url,callback){ var xhr=new XHRHttpRequest(); xhr.open('get',url,true); xhr.onreadystatechange=function(){  if(xhr.readyState==4){    //do something    if(callback){     callback();    }    xhr.open('get',url,true);     xhr.send();//这里完成了循环过程      } }; xhr.send();}
setTimeout(function(){getMessage(url,callback);},2000);

这样的轮询方式解决了短轮询那样无休止的发送请求,而是改为只要服务器搭理我并给我返回数据,我才会继续轮询。

3.JSONP或callback轮询

无论是长轮询或段轮询都不能跨域进行数据请求,所以JSONP轮询应运而生。

function getMessage(url,callback){ var oScript=document.createElement('script'); oScript.src=url+'?callback=getMessage.callback'; getMessage.callback=function(data){    callback(data);    getMessage(url,callback);//递归调用完成轮询过程 }  document.getElementsByTagName('head')[0].appendChild(oScript);}

 声明:这些轮询技术不可避免的问题就是增加服务器CPU的负担,虽然Comet服务器会优化HTTP/线程/进程,但是不会优化套接字的规模数,这些都会给服务器造成不可预知的问题,所以还要使用替代技术做一些优化,从而避免套接字的检查。

转载于:https://www.cnblogs.com/JhoneLee/p/3594191.html

你可能感兴趣的文章
Java大数——a^b + b^a
查看>>
poj 3164 最小树形图(朱刘算法)
查看>>
百度贴吧图片抓取工具
查看>>
服务器内存泄露 , 重启后恢复问题解决方案
查看>>
第二阶段冲刺(2)
查看>>
ajax post 传参
查看>>
2.1命令行和JSON的配置「深入浅出ASP.NET Core系列」
查看>>
android一些细节问题
查看>>
KDESVN中commit时出现containing working copy admin area is missing错误提示
查看>>
利用AOP写2PC框架(二)
查看>>
xp sp3安装IIS
查看>>
【动态规划】skiing
查看>>
java定时器的使用(Timer)
查看>>
Cocos2d-x官方在线视频-Cocos2d-x3.2《2048》手游开发揭秘
查看>>
Android实现静默安装与卸载
查看>>
WPF:警惕TextBox会占用过多内存
查看>>
springboot 连接池wait_timeout超时设置
查看>>
Spring @Conditional注解的使用
查看>>
修改mysql max_allowed_packet 配置
查看>>
C#—总结
查看>>