let socket = null; let heartbeatInterval = null; /** * 建立 WebSocket 连接 */ function createWebSocket(token, onMessage) { socket = uni.connectSocket({ url: `ws://120.79.241.5:8000/socket?authorization=${token}`, success: () => console.log("websocket 连接成功"), }); // 接收消息 uni.onSocketMessage((res) => { if (onMessage) onMessage(res.data); }); // 错误处理 uni.onSocketError((err) => { console.error("WebSocket 错误", err); }); // 关闭处理 uni.onSocketClose(() => { console.log("WebSocket 已关闭"); }); // 启动心跳 startHeartbeat(); } function closeWebSocket() { if (socket) socket.close(); } /** * 启动心跳 */ function startHeartbeat() { stopHeartbeat(); // 防止重复启动 heartbeatInterval = setInterval(() => { if (socket && uni.sendSocketMessage) { console.log("ping"); uni.sendSocketMessage({ data: "ping", fail: (err) => { console.error("发送心跳失败", err); }, }); } }, 5000); } /** * 停止心跳 */ function stopHeartbeat() { if (heartbeatInterval) { clearInterval(heartbeatInterval); heartbeatInterval = null; } } export default { createWebSocket, closeWebSocket, };