From e1cb712c57cb1fab0da9a8fc7720023bc1b824df Mon Sep 17 00:00:00 2001 From: kron Date: Wed, 28 May 2025 23:49:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0websocket=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/websocket.js | 74 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/websocket.js diff --git a/src/websocket.js b/src/websocket.js new file mode 100644 index 0000000..145eacc --- /dev/null +++ b/src/websocket.js @@ -0,0 +1,74 @@ +// utils/websocket.js + +let socket = null; +let messageCallback = null; + +/** + * 连接 WebSocket + * @param {String} url WebSocket 地址 + * @param {Function} onMessage 消息回调 + */ +function connectWebSocket(token, onMessage) { + messageCallback = onMessage; + + socket = uni.connectSocket({ + url: `ws://120.79.241.5:8000/socket?authorization=${token}`, + success: () => { + console.log("连接建立成功"); + }, + fail: (err) => { + console.error("连接失败", err); + }, + }); + + // 接收消息 + uni.onSocketMessage((res) => { + if (messageCallback) { + messageCallback(res.data); + } + }); + + // 错误处理 + uni.onSocketError((err) => { + console.error("WebSocket 错误", err); + }); + + // 关闭处理 + uni.onSocketClose(() => { + console.log("WebSocket 已关闭"); + socket = null; + }); +} + +/** + * 发送消息 + * @param {String} msg 要发送的消息内容 + */ +function sendWebSocketMessage(msg) { + if (socket && uni.sendSocketMessage) { + uni.sendSocketMessage({ + data: msg, + fail: (err) => { + console.error("发送消息失败", err); + }, + }); + } else { + console.warn("WebSocket 未连接"); + } +} + +/** + * 关闭连接 + */ +function closeWebSocket() { + if (socket) { + uni.closeSocket(); + socket = null; + } +} + +export default { + connectWebSocket, + sendWebSocketMessage, + closeWebSocket, +};