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

2 回复

如果是连接断开了,但是socketTask.onClose却也没执行

更多关于uni-app socketTask.send 部分手机app端无法发送消息 fial 和 success都执行的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个典型的 WebSocket 连接状态异常问题。从代码逻辑看,虽然检查了 socketOpen 状态,但部分手机可能存在以下情况:

  1. 连接假状态:WebSocket 在系统层面可能已断开(如网络切换、后台限制),但应用层状态未及时更新,socketOpen 仍为 true。

  2. 系统兼容性问题:某些 Android 厂商系统对 WebSocket 有特殊限制,可能在应用进入后台或锁屏时强制断开连接,重连机制不完善会导致发送失败。

  3. 时序问题:在快速连续发送时,如果前一个消息导致连接异常,后续消息可能同时触发 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 {
    // 触发重连或提示连接已断开
}
回到顶部