w***@gmail.com
w***@gmail.com
  • 发布:2021-09-26 15:58
  • 更新:2023-12-25 20:01
  • 阅读:2715

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

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

m***@163.com

m***@163.com

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

4212

4212

这个问题有解决吗

  • 1***@qq.com

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


    2023-06-05 09:03

1***@qq.com

1***@qq.com

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

要回复问题请先登录注册