修复运行到支付宝小程序报错和websokcet连接问题

This commit is contained in:
2025-05-19 18:45:37 +08:00
parent 11ceead115
commit 447c8d1147
5 changed files with 528 additions and 99 deletions

View File

@@ -31,6 +31,18 @@ const useWebSocket = (options = {}) => {
const allowReconnect = ref(true); // 新增:控制是否允许重连
// 关闭现有连接并清理资源
const closeExistingConnection = () => {
// 清除心跳定时器
clearInterval(heartbeatTimer.value);
heartbeatTimer.value = null;
// 清除重连定时器
clearTimeout(reconnectTimer.value);
reconnectTimer.value = null;
// 标记连接已断开
isConnected.value = false;
uni.closeSocket()
if (socketTask.value) {
// 关闭 WebSocket 连接
socketTask.value.close({
@@ -72,7 +84,7 @@ const useWebSocket = (options = {}) => {
// 关闭现有连接并清理资源
closeExistingConnection();
socketTask.value = uni.connectSocket({
uni.connectSocket({
url: uni.conf.baseUrlwws,
success: (res) => {
isConnected.value = true;
@@ -87,6 +99,63 @@ const useWebSocket = (options = {}) => {
}
});
uni.onSocketOpen(function(res) {
console.log('WebSocket连接已打开');
sendMessage(initMessage)
});
function sendSocketMessage(msg) {
if (isConnected.value) {
uni.sendSocketMessage({
data: msg
});
} else {
socketMsgQueue.push(msg);
}
}
uni.onSocketError(function(res) {
console.log('WebSocket连接打开失败请检查');
console.error('WebSocket 连接发生错误:', err);
isConnected.value = false;
clearInterval(heartbeatTimer.value);
if (autoReconnect.value && !isManuallyClosed.value) {
handleReconnect();
}
});
uni.onSocketMessage(function(res) {
console.log('收到服务器内容:' + res.data);
receivedMessages.value = JSON.parse(res.data)
// receivedMessages.value.push(list);
if (receivedMessages.value == 'ok' || receivedMessages.value.operate_type == 'init') {
console.log('初始化正常,心跳响应正常');
// 清除重连定时器
clearTimeout(reconnectTimer.value);
allowReconnect.value = false
reconnectTimer.value = null;
}
});
uni.onSocketClose(function(res) {
console.log('WebSocket 已关闭!');
console.log(res, 'WebSocket 连接已关闭,尝试重连');
isConnected.value = false;
clearInterval(heartbeatTimer.value); // 停止心跳定时器
clearTimeout(reconnectTimer.value); // 清除重连定时器
if (res.code == '1006' && !allowReconnect.value) {
uni.showToast({
title: '网络异常,请重新扫码',
icon: 'none'
});
autoReconnect.value = false;
setTimeout(() => {
uni.pro.switchTab('index/index');
}, 1000)
return false;
}
if (autoReconnect.value && !isManuallyClosed.value) {
handleReconnect();
}
});
if (socketTask.value) {
socketTask.value.onOpen(() => {
// 初始化 初始购物车
@@ -223,8 +292,8 @@ const useWebSocket = (options = {}) => {
// 发送消息
const sendMessage = async (data) => {
if (isConnected.value) {
await socketTask.value.send({
data: JSON.stringify(data),
uni.sendSocketMessage({
data:JSON.stringify(data),
success: () => {
// console.log('消息发送成功');
},
@@ -232,6 +301,15 @@ const useWebSocket = (options = {}) => {
// console.error('消息发送失败');
}
});
// await socketTask.value.send({
// data: JSON.stringify(data),
// success: () => {
// // console.log('消息发送成功');
// },
// fail: () => {
// // console.error('消息发送失败');
// }
// });
} else {
console.error('WebSocket 未连接,无法发送消息');
}
@@ -252,7 +330,7 @@ const useWebSocket = (options = {}) => {
console.log('重连功能已关闭,不进行重连');
return;
}
if (reconnectAttempts.value < maxReconnectAttempts) {
reconnectAttempts.value++;
const reconnectInterval = initialReconnectInterval * Math.pow(2, reconnectAttempts.value - 1);