w***@gmail.com
w***@gmail.com
  • 发布:2021-09-26 15:58
  • 更新:2024-12-06 10:55
  • 阅读:4099

uni-app调用websocket无法关闭

分类:uni-app

Android端APP,第一次执行uni.closeSocket后会显示关闭成功,但是WebSocket并没有被关闭,依然在获取数据。之后的uni.closeSocket全部返回关闭失败!

uni.connectSocket({  
                    url: 'ws://172.16.32.204:8000',  
                    success: (res) => {  
                        console.log("WebSocket服务连接成功!");  
                    }  
                })  

                uni.onSocketOpen(function() {  

                    uni.onSocketMessage(function(res) {  
                        console.log("收到服务器内容:" + res.data);  

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

                    })  

                })
2021-09-26 15:58 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com

我昨天刚试了移动端。你试行不行。就是uni.closeSocket的参数里有一个code,默认是发送1000的。表示正常关闭。把这个值换成1000之外的值,例如500.就会关闭。同时onSocketError会被调用。

  • 2***@qq.com

    大佬的方法亲测有效

    2023-09-22 14:24

  • 1***@qq.com

    app还是没有办法正常关闭

    2024-10-09 19:15

w***@gmail.com

w***@gmail.com (作者) - Simple_Wang

同样代码下H5端正常,怀疑是APP端的Bug。

w***@gmail.com

w***@gmail.com (作者) - Simple_Wang

别沉啊,官方有没有解决方案。要是有得救我就不改写WebView了啊!

苏陌

苏陌

别沉啊

w***@gmail.com

w***@gmail.com (作者) - Simple_Wang

H5和IOS 15测试均正常,Android 8和Android 10关闭全失效。目前手里就这些设备了,现在已改用WebView作为临时方案。希望官方尽快修改。

DCloud_Android_DQQ

DCloud_Android_DQQ

我试试

  • 苏陌

    是不是有问题,我这边虽然显示关闭成功,但是ios还是可以接收到心跳

    2021-09-28 13:02

  • DCloud_Android_DQQ

    回复 苏陌: 你不要立刻执行关闭。 设置个timeout 延迟2s试试

    2021-09-29 15:37

  • 苏陌

    回复 DCloud_Android_DQQ: 我是在退出登录的时候 关闭的

    2021-09-29 16:23

  • 苏陌

    回复 DCloud_Android_DQQ: 延迟2s也不行,监听关闭api已经监听到已关闭了,但是还是可以接收到心跳,苹果11

    2021-09-29 16:38

  • DCloud_Android_DQQ

    回复 苏陌: 那到底是苹果的问题 还是 android的问题哟

    2021-09-30 11:27

  • 苏陌

    回复 DCloud_Android_DQQ: D哥,我一直说的ios,没有用安卓测试

    2021-09-30 11:31

  • w***@gmail.com (作者)

    回复 DCloud_Android_DQQ: Android 10试过了延迟关闭,也无效。

    2021-09-30 15:16

  • w***@gmail.com (作者)

    回复 DCloud_Android_DQQ: 我上面贴的那个代码,放在iOS上是可以正常关闭的,Android端无效。至于楼上说的心跳我不清楚,我这边的需求是拿到第一个值以后立刻关闭WebSocket。

    2021-09-30 15:18

  • DCloud_Android_DQQ

    回复 w***@gmail.com: 我看看

    2021-10-08 11:12

  • DCloud_Android_DQQ

    回复 w***@gmail.com: 我回复在下面了。

    2021-10-08 15:24

DCloud_Android_DQQ

DCloud_Android_DQQ

再总结一下。 你的写法是有问题的。 用下面的代码测试 可以实现你的需要

websocket: function() {  
                console.log("websocket!222");  
                uni.connectSocket({  
                    url: 'wss://xxxxxxxx.com/xxxx/Socket?token=290090',  
                    success: (res) => {  
                        console.log("WebSocket服务连接成功!");  
                    }  
                })  

                // uni.onSocketOpen(function() {  

                    uni.onSocketMessage(function(res) {  
                        console.log("收到服务器内容:"   res.data);  

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

                    })  

                // })  

            },

  • w***@gmail.com (作者)

    我用这段代码测试了一下还是关不上,跟我上面贴出的代码效果一样。

    2021-10-10 16:30

  • DCloud_Android_DQQ

    回复 w***@gmail.com: 换个手机。或者你提供一下你的websocket 地址我在我这边试试

    2021-10-11 11:15

  • DCloud_Android_DQQ

    回复 w***@gmail.com: 我这边换了几部手机都OK

    2021-10-11 11:55

  • t***@sino-essence.com

    我也碰到这种情况了,h5可以正常关闭,app关闭不了。用了你贴的代码还是不行,请问有解决办法吗?

    2022-06-02 13:35

云中踏浪

云中踏浪 - 一个开发小白

我的也关不上,虽然提示关闭成功,但是还是有心跳发送

4212

4212

这个问题有解决吗

  • 1***@qq.com

    我昨天刚试了移动端。你试行不行。就是uni.closeSocket的参数里有一个code,默认是发送1000的。表示正常关闭。把这个值换成1000之外的值,例如500.就会关闭。同时onSocketError会被调用。

    2023-06-05 09:03

1***@qq.com

1***@qq.com

问下,这个问题处理了吗,发现移动端小程序也有这个问题,没法关闭websocekt,有解决方案吗

jimu

jimu

真的是服了, 沉年老问题,2024了。还有。死活关不掉,提示了关闭成功,但是心跳还是有, 进页面了又创建一个监听,然后返回上一页,提示关闭成功, 重新进入页面,又创建一个监听。导致所有功能都不正常。

反正就是每次退出都提示正常关闭了监听,但是重新进入页面创建监听,就会在上次的基础监听上+1次。

机型是华为P60 ,魅族的也试了,一样。

  • c***@163.com

    哈哈哈 难兄难弟 不敢置信是3年前就发现的bug

    2024-12-06 10:07

c***@163.com

c***@163.com

用socketTask 试试 可以关闭&onMessage

虽然没解决但是结果正确

要回复问题请先登录注册