uni-app 【报Bug】uni.connectSocket 返回 errMsg : "connectSocket:ok",但是 uni.onSocketOpen却没有任何触发

发布于 1周前 作者 caililin 来自 Uni-App

uni-app 【报Bug】uni.connectSocket 返回 errMsg : “connectSocket:ok”,但是 uni.onSocketOpen却没有任何触发

操作步骤:

  • 在网络差的时候,点击几次连接的时候,uni.connectSocket ,还未有返回值,然后再退出,再次点击uni.connnectSocket,返回值是返回 errMsg : “connectSocket:ok”,但是 uni.onSocketOpen 没有返回值,看H5控制台打印发现后面的请求并没有发出。

预期结果:

  • 需要网络差的时候uni.onSocketOpen也能正常返回值,而且调用uni.closeSocket();能把pending状态的socket给清除掉。

实际结果:

  • uni.closeSocket()不能把pending状态的socket清除。

bug描述:

  • uni.connectSocket 返回 errMsg : “connectSocket:ok”,但是 uni.onSocketOpen却没有任何触发:

触发场景:

  • 在网络差的时候,点击几次连接的时候,uni.connectSocket ,还未有返回值,然后再退出,再次点击uni.connnectSocket,返回值是返回 errMsg : “connectSocket:ok”,但是 uni.onSocketOpen 没有返回值,看H5控制台打印发现后面的请求并没有发出。
  • 只有重新关掉进程之后。才能再次正常重新发起。
开发环境 版本号 项目创建方式
Windows win10 HBuilderX
4.24
Android Android 15
华为 p40 pro
页面类型 Vue版本
--------- -------
vue vue2

1 回复

在处理 uni-app 中的 WebSocket 连接问题时,遇到 uni.connectSocket 返回 errMsg: "connectSocket:ok"uni.onSocketOpen 没有触发的情况,通常意味着连接虽然建立请求已发送且被接受为“ok”,但实际连接打开的事件没有被正确触发。这种情况可能由多种原因引起,包括但不限于服务器配置、网络问题、客户端代码逻辑错误等。

以下是一个简化的 uni-app WebSocket 使用示例,以及可能的调试和检查步骤。请确保您的代码结构类似,并且检查每一步是否正确实现。

WebSocket 使用示例

// 连接服务器
uni.connectSocket({
    url: 'wss://example.com/socket', // 替换为您的WebSocket服务器地址
    success: function (res) {
        console.log('连接成功', res);
        // 注意:这里的成功仅表示连接请求已发送,并不保证连接真正打开
    },
    fail: function (err) {
        console.error('连接失败', err);
    }
});

// 监听连接打开事件
uni.onSocketOpen(function (res) {
    console.log('WebSocket连接已打开', res);
    // 在这里可以发送消息等
});

// 监听连接错误事件
uni.onSocketError(function (err) {
    console.error('WebSocket连接错误', err);
});

// 监听连接关闭事件
uni.onSocketClose(function (res) {
    console.log('WebSocket已关闭', res);
});

// 发送消息到服务器
uni.sendSocketMessage({
    data: 'Hello Server',
    success: function () {
        console.log('消息发送成功');
    }
});

// 关闭连接
// uni.closeSocket();

调试步骤

  1. 检查服务器地址:确保 url 参数正确无误,且服务器支持 WebSocket 协议。
  2. 服务器日志:查看服务器端的日志,确认是否接收到连接请求,以及是否有任何错误信息。
  3. 网络问题:使用工具如 Wireshark 或浏览器的开发者工具检查网络请求和响应。
  4. 代码审查:确保没有其他地方(如组件的 onUnload 生命周期)错误地调用了 uni.closeSocket()
  5. 版本兼容性:检查 uni-app 和相关依赖库的版本,确保没有已知的兼容性问题。
  6. 控制台输出:增加更多的 console.log 语句,帮助追踪代码执行流程和变量状态。

通过上述代码示例和调试步骤,您应该能够定位问题的根源,并进一步解决 uni.onSocketOpen 未触发的问题。如果问题依旧存在,可能需要更深入地检查网络环境或服务器配置。

回到顶部