uni-app 【报Bug】uni.connectSocket 返回 errMsg : "connectSocket:ok",但是 uni.onSocketOpen却没有任何触发
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();
调试步骤
- 检查服务器地址:确保
url
参数正确无误,且服务器支持 WebSocket 协议。 - 服务器日志:查看服务器端的日志,确认是否接收到连接请求,以及是否有任何错误信息。
- 网络问题:使用工具如 Wireshark 或浏览器的开发者工具检查网络请求和响应。
- 代码审查:确保没有其他地方(如组件的
onUnload
生命周期)错误地调用了uni.closeSocket()
。 - 版本兼容性:检查
uni-app
和相关依赖库的版本,确保没有已知的兼容性问题。 - 控制台输出:增加更多的
console.log
语句,帮助追踪代码执行流程和变量状态。
通过上述代码示例和调试步骤,您应该能够定位问题的根源,并进一步解决 uni.onSocketOpen
未触发的问题。如果问题依旧存在,可能需要更深入地检查网络环境或服务器配置。