修复运行到支付宝小程序报错和websokcet连接问题
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user