websocket的实践

最近接触到 websocket,由于之前并没有使用过,所以网上百度一番,最后还是看了一遍 websocket的介绍

上面文章原理上的都说的很明白,所以我就提取出我自己要用的小 demo 来,下面分别是属性事件方法的介绍,为了方便查看故将上面介绍中的顺便拿过来。

 

属性

readyState (只读属性 readyState 表示连接状态)

0 - 表示连接尚未建立。

1 - 表示连接已建立,可以进行通信。

2 - 表示连接正在进行关闭。

3 - 表示连接已经关闭或者连接不能打开。

事件

Socket.onopen 连接建立时触发

Socket.onmessage 客户端接收服务端数据时触发

Socket.onerror 通信发生错误时触发

Socket.onclose 连接关闭时触发

方法

Socket.send() 使用连接发送数据

Socket.close() 关闭连接

 

这样我们就可以一边看着下面代码,也可以看着这些方法事件等来修改 demo。

 

var ws
var url = "ws://xxxx"
function WebSocketTest() {
  if ("WebSocket" in window) {
    // 打开一个 web socket
    ws = new WebSocket(url);
    ws.onopen = function() {
      // 根据后台要求拼接好对应的 json 数据(不一定是 json, 看后台规定)
      var json={
        "test": "test"
      }
      console.log('WebSocket 第' + n + '次请求')
      // Web Socket 已连接上,使用 send() 方法发送数据
      ws.send(JSON.stringify(json));
      console.log('已连接上 WebSocket')
      // 模拟断开 => 可以开启下面代码模拟服务器断开时重新请求连接的效果
      // setTimeout(function(){
      //   ws.onclose()
      // }, 8000)
    };
    ws.onmessage = function (ev) {
      var json = ev.data;
      console.log('这里是接收到服务器发送的数据:' + json)
    };
    ws.onclose = function() {
      // 关闭 websocket
      console.log("连接已关闭...")
      // 当监听到 websocket 连接断开时,重新连接
      reconnect()
    };
  } else {
     // 浏览器不支持 WebSocket
     alert("您的浏览器不支持 WebSocket!");
   }
}
var timer = null
// 重新连接
function reconnect () {
  try {
    // 将上一次的定时器清除
    timer && clearTimeout(timer)
    // 这里将尝试连接
    WebSocketTest()
  } catch {
    // 当连接失败时延迟3秒后再次重新请求连接
    timer = setTimeout(function (){
      reconnect()
    }, 3000)
  }
}
// 页面关闭时触发
window.onunload = function () {
  if (ws) {
    ws.close()
  }
}
// 页面刷新时触发
window.onbeforeunload = function () {
  if (ws) {
    ws.close()
  }
}

 

posted @ 2018-10-26 20:19  Tsingtree  阅读(337)  评论(0编辑  收藏  举报