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>