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>