哈哈柚
哈哈柚
  • 发布:2022-07-25 10:04
  • 更新:2024-09-30 12:32
  • 阅读:1111

【报Bug】Socket服务onSocketOpen监听触发多次打印

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: 10

HBuilderX类型: 正式

HBuilderX版本号: 3.4.18

手机系统: Android

手机系统版本号: Android 12

手机厂商: 小米

手机机型: 至尊10

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

打开test页面,onSocketOpen输出1次,返回上一页,再次打开test页面onSocketOpen输出2次,依次会+1

预期结果:

正常连接1次

实际结果:

每次+1(是否影响应能。实际上是不是只链接了1次)

bug描述:

onSocketOpen打印多次。
onUnload中执行uni.closeSocket()后
第一次打开test页面onSocketOpen打印1次,然后返回上一页,
第二次打开test页面onSocketOpen打印2次
第三次三次,依次每次都会增加1次
(ws地址网络上随便找的一个,可能链接不上,本地启动的ws服务,依然存在这个问题)

2022-07-25 10:04 负责人:DCloud_UNI_WZF 分享
已邀请:
6***@qq.com

6***@qq.com

有解决办法吗?我也是这个问题,onHide中也没用,每次退出后再进入都会增加一次,到第五次的时候就会崩溃,无法监听到onSocketOpen,直接就无法使用了。

7***@qq.com

7***@qq.com - 111

我也遇到同样的问题,请问你解决了吗

iimeepo

iimeepo - 2264535743@qq.com

我也遇到同样问题了,求教啊

6***@qq.com

6***@qq.com

我也是这个问题,每次退出后再进入都会增加一次。

套马杆的套子

套马杆的套子 - 没有解决不了的问题,只有解决不完的问题

在跳转到其他界面的时候,用onUnload的话,界面没卸载的话,不会走onUnload,也不会走uni.closeSocket()
onHide可以试试

  • user_name

    我这的uni.onSocketClose监听到了也是这种情况,为啥

    2024-03-14 09:39

6***@qq.com

6***@qq.com

https://uniapp.dcloud.net.cn/api/request/socket-task.html 只会测发一次,真机测试正常,打包安卓测试:如果进入页面打开,退出页面关闭,然后再进入页面 就会打开异常。

user_name

user_name

我也遇到了 只要调用了uni.closeSocket()除非刷新,不然uni.onSocketOpen会翻倍的触发

  • 1***@qq.com

    我这是累加的触发

    2024-08-26 14:02

l***@gmail.com

l***@gmail.com

没有解决方法吗?我也遇到了

l***@gmail.com

l***@gmail.com

我的问题大根是这样解决的——

原因:
跳转到其它页面时,原页面有缓存,当第二次进入页面并建立Socket连接时,第一次访问页面时的监听器还在,所以会再次执行sendSocketMessage。

解决方法:
定义一个变量,初始值为true,onHide时设为false;在sendSocketMessage前判断一下,如果变量值为true时才sendSocketMessage。

  • 2***@qq.com

    你这个不行,我试了下,第二次进来为false,直接建立websocket不执行了,接受不到消息

    2024-09-14 08:54

不名用户_蒋某

不名用户_蒋某

去年遇到的问题,今年还没处理掉,求救

1***@qq.com

1***@qq.com - 打包

好几年了,官方都不能出来解决一下?

1***@qq.com

1***@qq.com

累加的问题我这边解决了

解决思路:

  • 用 uni.connectSocket({}) 返回的 task 去控制就好了
  • 之前我用的是 uni 那一套,感觉它不知道关闭那个socket,可以尝试用 task 去关闭,具体代码在附件里

socketTask = await uni.connectSocket({})  

用 socketTask 去关闭 socket

socketTask的写法在这里:https://uniapp.dcloud.net.cn/api/request/socket-task.html

1***@qq.com

1***@qq.com

这个问题解决了吗?
官方还没有修复还是说机制就是这样?

要回复问题请先登录注册