zoukankan      html  css  js  c++  java
  • 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()
      }
    }
  • 相关阅读:
    python---RabbitMQ
    Apicloud学习第四天
    Apicloud学习第三天——获取云数据库的数据方法
    APICloud学习第二天——操作云数据库
    font-spider问题【已解决】
    Apicloud学习第一天
    sass补充(2019-3-9)
    sublime中编译的sass如何改变css输出风格?【这里有答案】
    SEO总结
    Sass学习第一天
  • 原文地址:https://www.cnblogs.com/webBlog-gqs/p/9858501.html
Copyright © 2011-2022 走看看