2***@qq.com
2***@qq.com
  • 发布:2024-04-23 15:15
  • 更新:2024-04-23 15:15
  • 阅读:24

在两个页面中都定义了socket对象,页面跳转时webSocket对象无法正常关闭

分类:uni-app

产品分类: uniapp/小程序/微信

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 3.99

第三方开发者工具版本号: 1.06.2402021

基础库版本号: 3.41

项目创建方式: HBuilderX

操作步骤:

在A页面使用uni.navigateTo方法跳转到B页面,在B页面中onUnload()方法中调用了socket.close方法关闭在B页面onLoad时创建的socket对象,重复几次以后就提示socket连接到达上限,在B页面中没能正常关闭socket连接

预期结果:

在B页面中定义的socket对象,应该在onUnload方法中使用socket.close时关闭对应的socket连接

实际结果:

在B页面中定义的socket对象,在onUnload方法中使用socket.close时调用的是A页面中socket对象的close方法

bug描述:

    function createSocket() {  

        const url = xxx;  
        socket = uni.connectSocket({  
            url: url,  
            complete: () => {  

            }  
        });  

        uni.onSocketOpen(function(res) {  
            console.log('WebSocket connection opened111111');  
            startHeartBeat(socket);  
        });  

        uni.onSocketError(function(error) {  
            console.error('WebSocket error:', error);  
        });  

        uni.onSocketMessage(function(message) {  
            loadInfo();  
        });  

        uni.onSocketClose(function() {  
            console.log('WebSocket connection closed1111');  
            clearInterval(heartInterval);  
        });  

    }

在A,B两个页面中都通过上述方式创建了一个socket对象,A页面为TabBar类型的页面,可从A页面跳转到B页面,也可从B返回A,在B页面返回A页面时,在生命周期函数onUnload()方法中,调用socket.close()方法,执行的不是B页面中socket对象的close方法而是A页面socket对象的close()方法,导致在页面切换时会一直累加socket连接,无法正确关闭B页面中的socket对象

2024-04-23 15:15 负责人:无 分享
已邀请:

要回复问题请先登录注册