jimu
jimu
  • 发布:2024-10-17 20:08
  • 更新:2024-10-17 20:10
  • 阅读:170

【报Bug】移动APP端,返回上一页 websock 使用 uni.closeSocket()关闭, uni.onSocketClose监听都提示成功,但是监听和心跳实际上并没有被关闭

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 4.29

手机系统: Android

手机系统版本号: Android 14

手机厂商: 华为

手机机型: p60

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

以下为初始化方法
markdown```
let _this = this;
console.log('初始化')
console.log(this.websock)

            this.websock = uni.connectSocket({  
                url: this.websock_url, //  
                success(res) {  
                    console.log(res);  
                },  
                fail() {  
                    console.log('连接失败')  
                },  
                complete() {  
                    console.log('连接完成')  
                }  
            });  

            // websocket连接上  
            uni.onSocketOpen(res => {  
                console.log('websocket成功连接')  
                console.log(res);  

                _this.web_setInterval = setInterval(() => {  
                    uni.sendSocketMessage({  
                        data: 'ping'  
                    });  
                }, _this.web_time);  

                _this.gosendup();  
                _this.intoget = setInterval(() => {  
                    _this.gosendup();  
                }, _this.intoTime);  
            });  

            // websocket接收到信息  
            uni.onSocketMessage(e => {  
                console.log('接收到消息')  
                console.log(e)  
                if (!e.data || e.data === 'pong' || e.data === 'connect') {  
                    return;  
                }  

                let databox = JSON.parse(e.data) || '';  
                if (databox.opType !== 'view' && databox.opType !== 'update') {  
                    return;  
                }  

                let data = databox.data;  
                let paginatedData = this.paginateArray(data.list, this.limit);  
                this.pageslist = paginatedData;  
                this.total = paginatedData.length;  

                if (!this.ispagesfor && paginatedData.length - 1) {  
                    this.ispagesfor = setInterval(() => {  
                        this.isjiazai = false;  
                        setTimeout(() => {  
                            if (this.aspages >= this.total) {  
                                this.aspages = 1;  
                            } else {  
                                this.aspages++;  
                            }  
                            this.ex_list_array(this.pageslist[this.aspages - 1], data, databox.opType);  
                        }, 200)  

                    }, this.pagestime);  
                    this.ex_list_array(this.pageslist[this.aspages - 1], data, databox.opType);  
                    return;  
                } else if (this.ispagesfor && this.total === 1) {  
                    this.aspages = 1  
                    clearInterval(this.ispagesfor);  
                    this.ispagesfor = null  
                }  
                this.ex_list_array(this.pageslist[this.aspages - 1], data, databox.opType);  
            });  
            // websocket发生错误  
            uni.onSocketError(function(err) {  
                console.log(err)  
            });  
            // websocket关闭  
            uni.onSocketClose(function(res) {  
                console.log('WebSocket 已关闭!');  
            });  


以下是卸载方法  

markdown``` // 页面卸载  
        onUnload() {  
            // 处理页面卸载逻辑  
            console.log('页面已经卸载');  

            uni.closeSocket({  
                code: 500,  
                success: function(res) {  
                    console.log("WebSocket关闭成功!");  
                },  
                fail: function(res) {  
                    console.log("WebSocket关闭失败!");  
                }  
            });  
        }, ```

操作步骤:

初始化注册好所有东西后,退出页面-返回上一页,会提示websocket正常退出了,然后重新进入页面, 初始化的监听等信息就会返回+1次,然后退出页面,提示也会提示+1次。

重复步骤就会依次+1

预期结果:

正常退出,重新进入页面创建新的websocket

实际结果:

退出后再次进入,所有监听返回会+1次

bug描述:

移动APP端,返回上一页 websock 使用 uni.closeSocket()关闭, uni.onSocketClose监听都提示成功,但是监听和心跳实际上并没有被关闭,再次进入页面,会在已有的基础上+1,所有监听都会重复执行+1次。

2024-10-17 20:08 负责人:无 分享
已邀请:
jimu

jimu (作者)

不太理解那个代码格式,什么包裹在markdown``` 中,看起来有点乱, 但是东西不多。

要回复问题请先登录注册