uni-app socketTask.send 部分手机app端无法发送消息 fial 和 success都执行
uni-app socketTask.send 部分手机app端无法发送消息 fial 和 success都执行
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | windows10 | HBuilderX |
示例代码:
if(this.im.socketOpen&&send_msg){
this.im.socketTask.send({
data: JSON.stringify(send_msg),
success:()=>{
this.saveMsg(send_msg, 1, this.im.chatIndex)
this.im.chatIndex = 0
this.send_content = ""
},
fail:err=>{
console.log(err)
uni.showToast({
title:'发送失败',
icon:'none',
mask:true
})
}
});
}else{
uni.showToast({
title:"发送失败,请重试",
icon:"none"
})
}
操作步骤:
打开聊天界面发送消息就直接success和fail都执行,且没有发送成功,但是其他手机正常,可以发送成功
预期结果:
可以发送成功
实际结果:
没有发送成功且success和fail都执行了
bug描述:
socketTask.send 部分手机app端无法发送消息 fial 和 success都执行,实际上没有发送成功,期间没有熄屏和长时间不操作。
更多关于uni-app socketTask.send 部分手机app端无法发送消息 fial 和 success都执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
如果是连接断开了,但是socketTask.onClose却也没执行
更多关于uni-app socketTask.send 部分手机app端无法发送消息 fial 和 success都执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的 WebSocket 连接状态异常问题。从代码逻辑看,虽然检查了 socketOpen
状态,但部分手机可能存在以下情况:
-
连接假状态:WebSocket 在系统层面可能已断开(如网络切换、后台限制),但应用层状态未及时更新,
socketOpen
仍为 true。 -
系统兼容性问题:某些 Android 厂商系统对 WebSocket 有特殊限制,可能在应用进入后台或锁屏时强制断开连接,重连机制不完善会导致发送失败。
-
时序问题:在快速连续发送时,如果前一个消息导致连接异常,后续消息可能同时触发 success 和 fail。
建议优化方案:
// 添加连接有效性检查
if(this.im.socketTask && this.im.socketTask.readyState === 1 && send_msg){
this.im.socketTask.send({
data: JSON.stringify(send_msg),
success:()=>{
// 发送成功处理
},
fail:(err)=>{
// 发送失败时主动关闭并重置连接
this.im.socketTask.close();
this.im.socketOpen = false;
// 触发重连机制
}
});
} else {
// 触发重连或提示连接已断开
}