vue3 实现websocket心跳基础代码

话不多说 直接看代码

<script setup lang="ts">
onMounted(() => {
  createWebSocket()   // 创建socket连接
  init() // 初始化
  if (heartConnet.value) clearInterval(heartConnet.value)
  heartConnet.value = setInterval(() => {
    createWebSocket()
    init()
  }, 60000)
})

// 建立webscoked连接
function createWebSocket() {
  try {
    socket = new WebSocket(
      `ws://${location.host}/wsUrl/myHandler/`
    )
  } catch (e) {
    reconnect()
  }
}

var socket: any = null    // socket对象
let heartConnet: any = ref(null) //连续一分钟心跳
let lockReconnect = false //避免重复连接
let tt: any = null

function init() {
  socket.onclose = () => {
    // 连接已关闭
    createWebSocket()    // 重新连接
  }
  socket.onerror = (_error: any) => {
    // 连接报错
    createWebSocket()    // 重新连接
  }
  socket.onopen = () => {
    console.log('websocket open')
  }
  socket.onmessage = (_event: any) => {
    let res = JSON.parse(_event.data)
    // 收到消息
    }
  }
}

function reconnect() {
  if (lockReconnect) {
    return
  }
  lockReconnect = true
  //没连接上会一直重连,设置延迟避免请求过多
  tt && clearTimeout(tt)
  tt = setTimeout(function () {
    createWebSocket()
    lockReconnect = false
  }, 2000)
}
</script>

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值