this ._socketTask = wx.connectSocket({ url: option.url, header: { ...option.header, 'content-type' : 'application/json' }, method: 'GET' , fail: function (res){ self._isLogin = false self.reConnect() } }) } |
sendHeartBreakMsg() { let self = this
self._socketTask.send({ data: 'HB_' +wx.getStorageSync( 'loginInfo' ).token, success: (e) => { // console.log('HB') }, fail: (res) => { console.log(res, self._socketTask, self._options, self._socketTask.readyState) if (self._socketTask && self._socketTask.readyState != 1) { self.reConnect() } else if (!self._socketTask) { self.createConnection() } } }) } catch (e){ console.log(e) } } |
错误日志已上传2019-05-21
正常connectSocket创建连接,测试使用两种方法发送message:sendSocketMessage / socketTask.send 发送。 一切在3-5分钟内是好的。切到后台,回到微信连天页面,再切回小程序,消息还是正常发送。操作3-5分钟后,发送消息就会报 sendSocketMessage: fail 。taskID not exist。此时websocket是连通的,readystate是open状态。我就想问一下这个报错是什么意思?导致sendSocketMessage一直报错。只有关闭微信重开才可以解决。kill吊销程序重启才能解决。 手机:iphoneXr IOS 12.2
基础库版本:2.7.0
这里看日志是 切后台一段时间以后 socket就被关闭了
可以监听socket的close事件,然后重新创建socket
恩恩,重新创建的socket也是成功的,readystate也是1,open状态。但是发不出消息,报 sendSocketMessage: fail 。taskID not exist。,如截图(19:19分的时候)。我为了保持socket一直在线,会每隔3秒发一次心跳,心跳发送就是报这个错呢,日志中看不到发送消息失败吗?
同样遇到,表现是成功链接以后,如果遇到断网。
第一个是 Ios会同时触发onClose和onError,安卓则只触发onClose
第二个是 进行重连的时候,安卓端表现正常,旧的websoket会被清除,而Ios则不会,Ios只会显示「taskId not exist」
第三个是 进行重连的时候,如果还是没有网络,安卓端只会触发onError,而Ios则会触发onClose和onError....
导致Ios端无限触发onClose,指数增长,创建无数实例
很明显就是两端表现不同步,Ios端逻辑有错误,或者安卓端没完整
解决办法是
第一个是,限制重连次数,避免无限创建实例
第二个是,加上链接成功的标识,保证链接成功后,onClose的只会触发一次
这个巨坑,其实是这样的,小程序websocket在连接超时或者网络切换(4g切换3g,3g切换2g)的时候,webscokt的回调函数存在异常。测试下来发现小程序websocket会先走onerror回调,wss协议这时候会关闭该连接,导致taskID已经被清空,但是后面又回回调onopen这个生命周期,此时readystate变为1。解决方案目前想到的就是强制重连,也希望微信官方能早日修复该bug
你能复现一下这个场景,然后上传一下日志,提供一下你的微信号和复现的时间点吗?
OK,微信号 qyd893533694 复现时间 2019/6/19 10:16-10:17 复现多次。日志已上传。
复现方式,config里配置wss连接超时为1s,移动端接入弱网,延迟1000ms比如,稳定先回调onerror, connect timeout 。然后onopen, 接下来就是taskiD not exist.
顺便问一句,小程序的wss怎么比较好的进行弱网测试~
只看到了10:08,10:09 的请求,都是成功的,麻烦你复现一下之后等几分钟,之后再次上传一下日志
我也遇到了同样问题,请问你最后怎么处理的
重新连接一个新的socket
三年了,有消息了吗
注意查看下小程序的证书问题,重新更换一下证书
请问这个问题修复了嘛,ios端小程序切后台websocket就会断网,重新进来重新连接就会出现问题
断网之后就这样一直保错 我用的是mqtt 链接的
我这边测试表现是:从菜单栏打开小程序,socket正常,从服务号点击进入,readyState一直显示是0,想强制关闭后重新创建socket,结果close失败,显示closeSocket:fail:taskId not exist;如果忽略关闭失败,即便重连,状态依旧不会变成1,只能让用户重启小程序才行。
错误日志已上传2019-05-21=>麻烦重新复现并提交下日志以及提供提交时候的微信号以及具体时间
错误日志已上传2019-05-21微信号:jppppp_
发生时间:19:00-19:30 出现过好多次(大于10次)
有消息吗?还需要提供什么资料吗?
处理中,有结果会及时同步
taskID not exist 是什么原因报错