1、轮询:指浏览器每隔一段时间向服务器发送HTTP请求,然后服务器返回最新的数据给客户端。缺点是浏览器需要不断的向服务器发送请求,然而HTTP请求与回复可能会包含较长的头部,其中真正有效的数据可能就一小部分,所以这样会消耗非常多带宽资源。
比较新的轮询技术是Comet,这种技术虽然可以实现双向通信,但仍须反复发出请求,而且在Comet采用的HTTP长连接也会消耗服务器资源。
var xhr = new XMLHttpRequest();
setInterval(function(){
xhr.open('GET','/user');
xhr.onreadystatechange = function(){
};
xhr.send();
},1000)
2、从通信的双方信息交互的方式来看,可以有以下基本方式:
1)单向通信:又称为单工通信,即只能有一个方向的通信而没有反方向的交互。无线电广播或有线电广播以及电视广播就属于这种类型。
2)半双工通信:是指数据可以沿两个方向传送,但同一时刻一个信道只允许单方向传送,因此义被称为双向交替通信,如对讲机就是一种半双工设备,在同一时间内只允许一方讲话。
3)全双工通信:是指同时发生在两个方向上的一种数据传输方式。电话机就是一种全双工设备,其通话双方可以同时进行对话。计算机之间的高速数据通信也是这种方式。
3、ISO七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
4、HTTP协议:通信只能由客户端发起,做不到服务器主动向客户端推送信息。当服务器发生变化时,只能采用轮询的方式:每隔一段时间就发出一个询问,了解服务器有没有最新的消息。
5、WebSocket是一种网络传输协议,可以进行全双工通信,位于ISO模型的应用层,建立在 TCP 协议之上。所有浏览器都已经支持了。最大的特点是:服务器可以主动向客户端推送消息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。用来取代轮询技术。
协议标识符是ws
(如果加密,则为wss
),服务器网址就是 URL。ws://example.com:80/some/path
6、WebSocket客户端实例
let ws = new WebSocket(url[,protocols]); //创建一个WebSocket对象
ws.readyState属性返回实例对象的当前状态,共有四种
CONNECTING:值为0,表示正在连接。
OPEN:值为1,表示连接成功,可以通信了。
CLOSING:值为2,表示连接正在关闭。
CLOSED:值为3,表示连接已经关闭,或者打开连接失败。
switch (ws.readyState) {
case WebSocket.CONNECTING:
// do something
break;
case WebSocket.OPEN:
// do something
break;
case WebSocket.CLOSING:
// do something
break;
case WebSocket.CLOSED:
// do something
break;
default:
// this never happens
break;
}
//onopen属性
ws.onopen = function(evt){
console.log("打开连接时要调用的事件监听器");
//send方法:发送你要传输的数据
ws.send("data");
}
//发生错误时要调用的事件监听器
ws.onerror = function(evt){}
//从服务器接收到消息时要调用的事件监听器
ws.onmessage = function(event){
let data = event.data;
// 处理数据
}
//连接关闭时要调用的事件监听器
ws.onclose = function(){
var code = event.code;
var reason = event.reason;
var wasClean = event.wasClean;
// handle close event
}
//关闭连接
ws.close([code[,reason]])