## 问题
小程序开发,创建websocket连接来通信,通信完成便释放掉。再通信再打开。当通信到第22次/34次时,websocket的onOpen将不再触发。
测试用的微信版本为7.0.3和7.0.4,基础库版本为2.6.6。
经测试,该问题有以下特点:
1. 若出现该问题,则100%一定复现。例如A手机在第22次出现了该问题,则下次运行小程序,必然还是22次出问题。且出问题后,本次运行小程序的websocket再也无法恢复正常。
-
清除小程序的后台进程,再次打开小程序,依然可以正常websocket通信22次。之后问题再次出现。
-
有的是卡在第22次,有的是卡在第34次。这是在真机调试,没有打开开发者工具调试界面情况下。若使用开发者工具,开着开发者工具的调试界面,则是卡在第20/32次。
-
与Android系统无关。目前测试出问题的手机Android系统有:Android 5.0,Android 6.0,Android 7.1.2,Android 8.1.0。
-
与手机无关。写一个网页,使用js的websocket实现同样的逻辑。用小程序出问题的手机的浏览器打开,经测试无连接次数限制。
-
与手机厂家无关。目前试过小米,魅族,原生谷歌系统,都出现过。
-
与手机型号无关。有一台出问题的手机为小米Note3,测试另一台同一批次参数完全相同的小米Note3,两台都为同一版本的MIUI与Android,将两台手机的各个设置全部调为一样,一台依然是正常的,不出现该问题;另一台则100%会在第34次通信出现该问题。
-
试过调整微信的权限,无效;试过清空微信的数据和缓存,无效;重装微信,绝大多数可以解决。有一台是谷歌原生系统7.1.2,重装也无法解决。
-
小程序与插件都存在该问题。
## 测试方法
定义一个变量count用于记录websocket成功连接的次数。
调用wx.connectSocket创建socketTask并暂存,在socketTask.onOpen中关闭该socketTask并令count++,在socketTask.onClose中调用wx.connectSocket来创建一个新的socketTask。重复上述步骤。
于是,只要websocket成功创建并触发onOpen,count就会+1。当该websocket成功关闭后,再重复该流程。一旦websocket没有触发onOpen,流程就会卡住。由此,当websocket卡住的时候,就可以知道已经成功建立了多少次websocket连接。
在此过程中是先关闭上次websocket完成后再开始创建下一个websocket,自始至终同一时间只有一个websocket,因此不存在超出5个websocket的问题。另外是在onOpen与onClose中执行的关闭与创建操作,所以也不存在时序问题。
麻烦在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,麻烦提供一下微信号,时间点并提供下代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)