Websocket实时通讯

  1 const ws = ref(null)
  2 const status = ref('未连接')
  3 onMounted(() => {
  4   initWebSocket();//实时通讯
  5 
  6   
  7 });
  8 // 实时通讯
  9 // 响应式数据
 10 let dataList = $ref([])
 11 let connectionStatus = $ref('未连接')
 12 // let ws = $ref(null)
 13 
 14 // WebSocket 配置
 15 // let WS_URL = 'ws://124.222.6.60:8800'//在线测试地址
 16 // let WS_URL = 'ws://172.16.182.102:8095/webSocket/1'//本地地址
 17 let WS_URL = 'ws://https://welfare.zhuritec.com/webSocket/1'//本地地址
 18 let RECONNECT_INTERVAL = 5000 // 5秒重连间隔
 19 let reconnectTimer = null
 20 // 处理接收到的消息
 21 const handleMessage = (event) => {
 22   console.log("处理接收到的消息:",event);
 23   content = event.data
 24   try {
 25     // const newData = event.data
 26     const newData = JSON.parse(event.data)
 27     // 更新数据列表(最新数据放前面)
 28     console.log("newData:",newData);
 29     activeList = [newData, ...activeList].slice(0, 50) // 保持最多50条
 30     console.log("activeList222:",activeList[0]);
 31     // 将activeList[0]中的createTime时间戳转换为年月日格式
 32     activeList = activeList[0].map(item => {
 33       return {
 34         ...item,
 35         createTime:dayjs(item.createTime).format('YYYY-MM-DD HH:mm:ss')
 36       }
 37     })
 38     console.log("activeList------:",activeList);
 39 
 40     
 41   } catch (error) {
 42     console.error('消息解析失败:', error)
 43   }
 44 }
 45 
 46 // 初始化 WebSocket 连接
 47 const initWebSocket = () => {
 48   console.log("初始化");
 49   connectionStatus = '连接中...'
 50   
 51   ws.value = new WebSocket(WS_URL)
 52   console.log("ws.value:",ws.value);
 53   // 连接成功
 54   ws.value.onopen = () => {
 55     console.log("链接上了娃哈哈");
 56     connectionStatus = '已连接'
 57     clearTimeout(reconnectTimer)
 58   }
 59 
 60   // 接收消息
 61   ws.value.onmessage = handleMessage
 62 
 63   // 错误处理
 64   ws.value.onerror = (error) => {
 65     console.error('WebSocket 错误:', error)
 66     connectionStatus = '连接错误'
 67     attemptReconnect()
 68   }
 69 
 70   // 连接关闭
 71   ws.value.onclose = (event) => {
 72     if (event.wasClean) {
 73       console.log(`连接正常关闭 Code=${event.code}`)
 74     } else {
 75       console.warn('连接意外中断')
 76       attemptReconnect()
 77     }
 78   }
 79 }
 80 // 连接关闭
 81 const onClose = () => {
 82   ws.value.close()
 83   connectionStatus = '已关闭'
 84 }
 85 // 尝试重连
 86 const attemptReconnect = () => {
 87   connectionStatus = '正在重连...'
 88   clearTimeout(reconnectTimer)
 89   reconnectTimer = setTimeout(() => {
 90     initWebSocket()
 91   }, RECONNECT_INTERVAL)
 92 }
 93 // 组件卸载前清理
 94 onBeforeUnmount(() => {
 95   if (ws.value) {
 96     ws.value.close()
 97     clearTimeout(reconnectTimer)
 98   }
 99 })
100 <template>
101 <div v-if="true" style="position: absolute; top:0; left: 0;color: #333;z-index: 99; padding: 10px; background-color: #ffffffe0;">
102         <p>
103           连接状态:{{ connectionStatus }}
104           <van-button type="primary" size="mini" @click="initWebSocket">重新连接</van-button>
105           <van-button type="primary" size="mini" @click="onClose">断开连接</van-button>
106         </p>
107         <!-- <div style="color: #fff;z-index: 99; margin-top: 10px;" v-html="content"></div> -->
108       </div>
109 </template>

 

posted on 2025-04-11 09:28  奔驰的码儿  阅读(21)  评论(0)    收藏  举报

导航