收藏
回答

websocket出现无法连接

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.connectSocket 客户端 7.0.4 2.6.6

## 问题

小程序开发,创建websocket连接来通信,通信完成便释放掉。再通信再打开。当通信到第22次/34次时,websocket的onOpen将不再触发。

测试用的微信版本为7.0.3和7.0.4,基础库版本为2.6.6。


经测试,该问题有以下特点:

1.  若出现该问题,则100%一定复现。例如A手机在第22次出现了该问题,则下次运行小程序,必然还是22次出问题。且出问题后,本次运行小程序的websocket再也无法恢复正常。

2. 清除小程序的后台进程,再次打开小程序,依然可以正常websocket通信22次。之后问题再次出现。

3. 有的是卡在第22次,有的是卡在第34次。这是在真机调试,没有打开开发者工具调试界面情况下。若使用开发者工具,开着开发者工具的调试界面,则是卡在第20/32次。

4. 与Android系统无关。目前测试出问题的手机Android系统有:Android 5.0,Android 6.0,Android 7.1.2,Android 8.1.0。

5. 与手机无关。写一个网页,使用js的websocket实现同样的逻辑。用小程序出问题的手机的浏览器打开,经测试无连接次数限制。

6. 与手机厂家无关。目前试过小米,魅族,原生谷歌系统,都出现过。

7. 与手机型号无关。有一台出问题的手机为小米Note3,测试另一台同一批次参数完全相同的小米Note3,两台都为同一版本的MIUI与Android,将两台手机的各个设置全部调为一样,一台依然是正常的,不出现该问题;另一台则100%会在第34次通信出现该问题。

8. 试过调整微信的权限,无效;试过清空微信的数据和缓存,无效;重装微信,绝大多数可以解决。有一台是谷歌原生系统7.1.2,重装也无法解决。  

9. 小程序与插件都存在该问题。


## 测试方法

定义一个变量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中执行的关闭与创建操作,所以也不存在时序问题。


最后一次编辑于  2019-04-24
回答关注问题邀请回答
收藏

2 个回答

  • 禾店短剧系统
    禾店短剧系统
    2021-06-09

    ebsocket 连接在刚开始运行正常,运行10分钟后新建连接则报告错误:

    failed: WebSocket is closed before the connection is established

    或者

    Opcode -1

    此时查看websocket连接,会发现有256个连接已经建立,但是无法建立新的连接。

    如果关闭当前的Chrome tab网页,则其他tab的网页立刻可以建立新的websocket连接。

    问题的根源是有个3秒自动运行的功能每次都打开新的websocket连接,而不关闭已有的连接,也不重用已有的连接。

    找到问题后,重用连接解决此问题。


    2021-06-09
    有用 1
    回复
  • 是小白啊
    是小白啊
    2019-04-25

    麻烦在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,麻烦提供一下微信号,时间点并提供下代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)

    2019-04-25
    有用
    回复 9
    • 2019-04-25

      日志已上传,微信号:prophet_yj

      代码片段:https://developers.weixin.qq.com/s/dtou5Tme7b7s


      2019-04-25
      回复
    • 小程序/小游戏开发-Link
      小程序/小游戏开发-Link
      2019-04-26回复

      从表现看很像是我们在 7.0.4 已经修复了的一个问题。请确认下是在 7.0.4 重现的,如果是。上传日志后,提供具体出现问题的时间点和微信号

      2019-04-26
      回复
    • 2019-04-27回复小程序/小游戏开发-Link

      排查了一下,出现问题的4个手机,版本应该都是7.0.3。其中有3台是重装微信解决的。还有一台出问题的手机是小米8,刚才跟机主交流了一下,当时出问题的时候微信是7.0.3版本,现在他已经升级到了7.0.4,再测试,这个问题也没有再出现。然而升级版本是否意味着重装?还是热更新?


      4月25日出问题的那台设备,重装了一个7.0.3版本,也解决了。上面给出的代码片段就是当时测试用的。重装前也是7.0.3,一直出问题,也上传了日志,微信号:prophet_yj,时间是4月25日15:43之前的几分钟内。


      我们这边设备有限,暂时没再遇到出这个问题的手机了。我们会继续测试观察。


      感谢官方大大的回复。


      PS:哪里能看到这个7.0.4的详细更新日志?所能查到的7.0.4官方更新说明都只有一行:发「视频动态」时,可以搜一首歌设为背景音乐。

      2019-04-27
      回复
    • jani
      jani
      2019-04-29

      我也是同样问题,在开发者工具那里onopen勾子能行,但是安卓系统真机上就不行,断线重连的时候不触犯onopen勾子

      2019-04-29
      回复
    • 雪灵
      雪灵
      2019-05-15回复jani

      遇到同样的问题,有找到原因么

      2019-05-15
      回复
    查看更多(4)
登录 后发表内容