Web 实现轮询

Web 实现轮询

实时通知与交付

一. 通过XHR 实现定时轮询

1
2
3
4
5
6
7
func checkUpdates(url){
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onloda = function() {.....};
xhr.send();
}
setInterval("checkUpdates('/updates'), 6000"); // 每6秒发一次XHR请求, 到服务端

最佳的轮询间隔是多少? 没有唯一的答案。

轮询的频率取决于应用的需要,而且始终都会存在关于效率和消息延迟的权衡,所以说。轮询适合间隔时间长;

新事件到达的时间有规律,且传输数据量大的场景。这个组合可以抵消多余的 HTTP 开销,并将消息交付的延迟最小化。

二. 通过XHR 实现长轮询

1
2
3
4
5
6
7
8
9
10
func checkUpdates(url){
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onloda = function() {
.....
checkUpdates('/updates');
};
xhr.send();
}
checkUpdates('/updates');

三. Websocket 实现长轮询