uni-app 使用SocketTask时,关闭页面并断开连接,IOS延迟5秒才关闭,安卓正常
uni-app 使用SocketTask时,关闭页面并断开连接,IOS延迟5秒才关闭,安卓正常
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | WIN10 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:WIN10
HBuilderX类型:正式
HBuilderX版本号:3.1.13
手机系统:iOS
手机系统版本号:IOS 14
手机厂商:苹果
手机机型:IPhone 8 PLUS
页面类型:vue
打包方式:离线
示例代码:
使用SocketTask,关闭页面并断开连接时,IOS会延迟5秒才关闭(当时页面已关闭),安卓正常的。 如果在这5秒内再次进入页面的话,会出现2个连接。
操作步骤:
日志:5秒左右的延迟
11:10:59.392 退出 at pages/test/test.vue:20
11:11:05.431 WebSocket Closed! at pages/test/test.vue:40 __ERROR
更多关于uni-app 使用SocketTask时,关闭页面并断开连接,IOS延迟5秒才关闭,安卓正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
ws://123.207.136.134:9010/ajaxchattest
12:51:46.384 WebSocket Connected! at pages/index/socketTest.vue:36
12:51:51.392 退出 at pages/index/socketTest.vue:24
12:51:51.413 WebSocket Closed! at pages/index/socketTest.vue:42 __ERROR
我使用的测试地址不会有延时的现象,是否跟服务端通信测略有关
更多关于uni-app 使用SocketTask时,关闭页面并断开连接,IOS延迟5秒才关闭,安卓正常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
目前我用第三方客户端工具,测试时也能立即断开。 就IOS是这样,请问需要做什么特殊处理吗?这个问题搞的很头疼
回复 一只小帕吉: 我这个就是用IOS设备测试的
换一个websocket地址试试?
在 iOS 上,WebSocket 关闭延迟 5 秒是系统底层行为,与 uni-app 框架无关。iOS 的 WebSocket 实现会在连接断开时等待约 5 秒以处理可能的未完成数据传输,这属于系统级优化机制。
建议在页面卸载前(onUnload 生命周期)主动调用 SocketTask.close() 并设置标记位防止重复连接。示例:
data() {
return {
socketTask: null,
isClosing: false
}
},
onUnload() {
if (this.socketTask && !this.isClosing) {
this.isClosing = true
this.socketTask.close()
this.socketTask = null
}
}
对于重复连接问题,可在 onLoad 中检查现有连接状态:
onLoad() {
if (this.socketTask && this.socketTask.readyState === 1) {
return // 避免重复创建
}
this.createSocket()
}


