websocket 与 http 差异:
http 链接分为长链接、短链接,短链接是发送一个要求,返回一个相应,长链接是在一定周期内保持链接。但是 websocket 只需连接一次就可以保持长链接,不须要的时候可以手动断开。http 通信中,客户端是主动的,做事端是被动的。但是 websocket,做事端可以主动向客户端推送数据。http 通过轮询建立的长链接,多次建立 request / response 会产生冗余的头部信息。ajax 轮询与 websocket 通信事理如图:
websocket 便是为理解决客户端发起多个 http 要求到做事器资源,浏览器必须要经由永劫光的,轮讯问题而生的,实现多路复用。它最大特点便是做事器可以主动向客户端推送信息。
二、WebSocket 工具
2.1、创建工具:
let ws = new WebSocket( url , [ protocol ] )
url:指定连接的后台做事地址。
protocol:指定可接管的子协议,是可选参数。
2.2、工具属性
readyState:表示连接状态,是一个只读属性。
利用语法:ws.readyState
返回的值有4个,分别表示的意义:
0 - 未建立连接1 - 已建立连接,可正常通信2 - 连接正在进行关闭3 - 连接已经关闭或断开,无法通信bufferedAmount:已被放入等待传输行列步队,但是还没有发出的 UTF-8 文本字节数,也是只读属性。
2.3、工具事宜
onopen - 连接时触发,用于指定连接成功后的回调函数。
利用语法:
// 方法一 :只可以指定一个回调函数ws.onopen = function(){}//方法二 :可以指定多个回调函数ws.addEventListener('open',function(){})
onclose - 关闭时触发,指定连接关闭时回调函数。
利用语法:与 onopen 完备同等。
onmessage - 客户端吸收做事端数据时触发,指定回调函数。
利用语法:
// 方法一:ws.inmessage = function(event){let data = event.data //做事器传给客户真个数据}// 方法二:ws.addEventListener('inmessage', function(event){let data = event.data //做事器传给客户真个数据})
onerror - 通信发生缺点时触发,并指定回调函数。
利用语法:
//方法一ws.onerror = function(){//缺点处理}//方法二ws.addEventListener('error',function(){//缺点处理})
2.3、工具事宜
send - 用于向做事器发送数据。
利用语法:
ws.send( data )
data :是发给做事器的数据,这个数据可以是字符串、数组、json、Blob 工具或 ArrayBuffer 工具等。
如发送 Blob 工具例子:
var file = document.querySelector('input='file'').files[0]ws.send(file)
close - 关闭连接
利用语法:
ws.close()