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

6 回复

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地址试试?

回复 9***@qq.com: 换了个服务端正常了。。。。但是安卓就很正常,有点莫名其妙,我再查下看看,谢谢!

在 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()
}
回到顶部