主要使用Ajax轮询、long poll(Ajax长查询)
Ajax轮询——“定时的通过Ajax查询服务端”:
浏览器按规定的时间向服务器发送请求,服务器接受到请求信息后返回响应信息并关闭连接。
$(function() {
//按规定的时间发送请求给服务器
setInterval("isHave();",5000);
});
function isHave(){
$.ajax({
url : "localhost/isHave",
data : {},
datatype: "json",
type : "post",
success : function(result) {
console.log(result);
}
});
}
Ajax长轮询——不间断的通过Ajax查询服务端"
var getting = {
url:'server.php',
dataType:'json',
success:function(res) {
console.log(res);
$.ajax(getting); //关键在这里,回调函数内再次请求Ajax
}
//当请求时间过长(默认为60秒),就再次调用ajax长轮询
error:function(res){
$.ajax($getting);
}
};
$.ajax(getting);
图中有两次请求,第一次很快返回了结果,然后不间断的立即发送第二次请求,但是第二次请求没有获得数据,所以请求迟迟没有返回(被挂在服务器了,但只要有数据就会再次返回),如果第二次的请求返回数据后,第三次请求旋即会立刻发出,这种技术就称为Ajax 长轮询。
但是使用这两种方式都存在一个问题,每个请求都会不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的一个特点,被动性,服务端不能主动联系客户端,只能有客户端发起。
这个时候WebSocket便以及其耀眼的方式出现了。
WebSocket是HTML5中开始出现、基于Tcp的一种持久协议(相对于HTTP协议而言),它可以实现客户端与服务器端的通信,实现服务器的推送功能。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送
WebSocket API的优势在于服务器和客户端可以在固定的时间范围内的任意时刻,相互推送消息。在建立连接之后,服务器可以主动传送数据给客户端
·WebSocket 并不限于以AJAX(或XHR)方式通信,因为Ajax技术需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息。