zoukankan      html  css  js  c++  java
  • 使用socket实现长连接

    我们常用的Ajax请求,是HTTP请求,请求过程是建立连接、客户端发送请求给服务器、服务端返回结果给客户端、关闭连接,这称为短连接。

    若想要实现长连接,即一直保持连接,而且服务器甚至可以直接发消息通知客户端,则需要使用socket技术。

    代码实现如下:

    mounted() {
      this.initWebSocket()
    }

    socket相关函数如下:

    initWebSocket() { // 初始化weosocket
      const wsuri = WS_URL + '/createConnect'
      this.websock = new WebSocket(wsuri + '?token=' + getToken() + '&connectId=' + uuid.v1())
      this.websock.onmessage = this.websocketonmessage
      this.websock.onopen = this.websocketonopen
      this.websock.onerror = this.websocketonerror
      this.websock.onclose = this.websocketclose
    },
    websocketonopen() { // 连接建立之后执行send方法发送数据
      const data = Object.assign({}, { 'pageSize': 10, 'pageNum': 1 })
      const actions = { 'data': data, 'module': 'getColdAlarmLog' }
      this.websocketsend(JSON.stringify(actions))
    },
    websocketonerror() { // 连接建立失败重连
      activeToken().then(rspData => {
        if (rspData.data.code === 200) {
          setTimeout(this.initWebSocket(), 15000)
        }
      })
    },
    websocketonmessage(e) { // 数据接收
      let socketReturnVal = JSON.parse(e.data)
      console.log('socketReturnVal', socketReturnVal)
      if (socketReturnVal == 'alarmFlag') {
        Message.info('监听到新的告警信息')
        this.handleQuery()
      }
    },
    websocketsend(data) { // 数据发送
      this.websock.send(data)
    },
    websocketclose(e) { // 关闭
      console.log('断开连接', e)
      activeToken().then(rspData => {
        console.log("正在进行重连1-1")
        if (rspData.data.code === 200) {
          console.log("正在进行重连1-2")
          setTimeout(this.initWebSocket(), 15000)
        }
      })
    }

    其中,WS_URL的值为ws://localhost:8901

    上面的代码需要导入uuid库

    "vue-uuid": "^1.1.1"
    import { uuid } from 'vue-uuid'

    socket技术常用于监控中,即后台产生告警消息,前端接受到消息(onmessage)做出响应。

  • 相关阅读:
    js对象方法
    重要的小知识点
    vs2017引用vue组件中文乱码
    单行文本溢出打点、多行文本溢出打点
    span和input布局时对不齐
    在思科三层交换机上配置DHCP,不同网段/VLAN间互通
    搭建ssm整合
    使用Redis
    MyBatis常用实现方式
    Java 面向对象
  • 原文地址:https://www.cnblogs.com/luoyihao/p/15094999.html
Copyright © 2011-2022 走看看