一、socket.io是什么?

先夸一下socket.io吧,它相对于websocket来讲,封装了服务端和客户端,使用简单方便。可以选择在服务端或是客户端开发实时应用。会根据浏览器来自己决定是使用WebSocket、Ajax长轮询还是Iframe流等方式去选择最优方式,甚至支持IE5.5...这里是它的 官网 。

那么...websocket又是什么呢?

二、http与websocket

简而言之,http是单向传递的,只能由客户端向服务器请求并获得返回信息,不可以由服务器直接推送数据给客户端。而websocket可以做到。浏览器端和服务器端都不断开的话,websocket连接就不会断开。在很多实时更新数据的场景下十分有用,例如聊天室,游戏,,还有我手头上正在写的反馈仪器使用情况的需求(仪器一旦故障,立即反馈到站点管理页面)。

三、websocket

3.1  websock的基本使用

创建websocket实例

var ws = new WebSocket('ws://localhost:3000')

连接成功后的回调函数,send方法向服务器发送数据

ws.onopen = function(evt) { 
  console.log("Connection open ..."); 
  ws.send("Hello WebSockets!"); //向服务器发送数据
};

从服务器收到信息的回调函数

ws.onmessage = function(evt) {
  console.log( "Received Message: " + evt.data);
};

关闭连接后的回调函数

ws.onclose = function(event) {
    var code = event.code;
    var reason = event.reason;
    var wasClean = event.wasClean;
};

出错回调函数

ws.onerror=function(){
    console.log('出错啦!')
}

3.2 常用属性

WebSocket.onclose

WebSocket.onerror

WebSocket.onmessage

WebSocket.onopen

WebSocket.url:websocket的绝对路径

WebSocket.readyState:当前连接的状态

  CONNECTING:值为0,表示正在连接。
  OPEN:值为1,表示连接成功,可以通信了。
  CLOSING:值为2,表示连接正在关闭。
  CLOSED:值为3,表示连接已经关闭,或者打开连接失败。

 

WebSocket.bufferAmount:未发送至服务器的字节数

  实例对象的bufferedAmount属性,表示还有多少字节的二进制数据没有发送出去。它可以用来判断发送是否结束。

WebSocket.binaryType:使用二进制的数据类型连接

  服务器数据可能是文本,也可能是二进制数据(blob对象或Arraybuffer对象)。除了动态判断收到的数据类型,也可以使用binaryType属性,显式指定收到的二进制数据类型。

WebSocket.protocol:服务器选择的下属协议

WebSocket.extensions:服务器选择的扩展

3.3 方法

WebSocket.close()

WebSocket.send(data)

3.4 调试

控制台 -> Network -> filter图标 -> WS

websocket请求的特点: Connection: Upgrade  Upgrade: websocket

Headers:查看请求信息

Frames -> data:查看数据,绿色的是发送的数据, 白色的是收到的数据