基于以上分析,我们可以看到,websocket能够提供低延迟,高性能的客户端与服务端的双向数据通信。它颠覆了之前web开发的请求处理响应模式,并且提供了一种真正意义上的客户端请求,服务器推送数据的模式,特别适合实时数据交互应用开发。
对比前面的http的客户端服务器的交互图可以发现WebSocket方式减少了很多TCP打开和关闭连接的操作,WebSocket的资源利用率高。
3.websocket的创建和常用的属性方法以下 API 用于创建 WebSocket 对象。
var Socket = new WebSocket(url, [protocol] );以上代码中的第一个参数 url, 指定连接的 URL。第二个参数 protocol 是可选的,指定了可接受的子协议。
WebSocket 属性以下是 WebSocket 对象的属性。假定我们使用了以上代码创建了 Socket 对象:
属性描述Socket.readyState
只读属性 readyState 表示连接状态,可以是以下值:
0 - 表示连接尚未建立。
1 - 表示连接已建立,可以进行通信。
2 - 表示连接正在进行关闭。
3 - 表示连接已经关闭或者连接不能打开。
Socket.bufferedAmount
只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数。
CONNECTING:值为0,表示正在连接。
OPEN:值为1,表示连接成功,可以通信了。
CLOSING:值为2,表示连接正在关闭。
CLOSED:值为3,表示连接已经关闭,或者打开连接失败。
var webSocket = new WebSocket(url); if(webSocket.readyState == webSocket.CONNECTING){ console.log(\'连接正在打开\'); } webSocket.onopen = function () { webSocket.send(consumerId); //可以看到 "连接正在打开"并没有被打印,说明open对应的就是OPEN状态; if(webSocket.readyState == webSocket.CONNECTING){ console.log(\'连接正在打开1\'); } if(webSocket.readyState == webSocket.OPEN){ console.log(\'连接已打开\'); } sendMsg(); window.weui.alert(\'已经建立连接\'); }; //连接关闭时触发 webSocket.onclose = function () { if(webSocket.readyState == webSocket.CLOSED){ console.log(\'连接已关闭\') } window.weui.alert(\'连接已断开\'); }; //连接 webSocket.onerror = function () { window.weui.alert(\'连接错误,请稍后再试\'); };