收藏
回答

小程序切换到后台之后,websocket断线重连的表现不一致

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug connectSocket 客户端 6.7.2 2.3.0




我这里是写了一个只要断线就会自动重连的脚本……

当我切换到后台之后,websocket可能会断线,断线之后产生close事件就会在后台自己重连。理论上是这样

但是现在:

在开发者工具的真机调试模式下面,websocket既不会连接成功也不会报错,一直就卡死在connecting状态上

在预览和自动预览下面,后台重连会报错,提示jsapi has no permission

而在开发者工具里直接点切后台,压根就没有发生过断线情况……


https://developers.weixin.qq.com/community/develop/doc/000e2c5859cc70a5883741bac56800

这个链接里的仁兄提出的方案是onhide和onshow分别做一次处理,确实是免除一切后患的方案,但是这样我又得加一个状态判断而且多少可能会漏掉一些信息……

想请问一下各位大神有没有什么………………比较合适的办法?还是说这其实是个bug?线上实际环境应该以哪个为准?

最后一次编辑于  2018-10-08
回答关注问题邀请回答
收藏

2 个回答

  • LEI
    LEI
    2018-10-09

    小程序已进入后台,好像就是跟断了网一样,所以,只要一进入后台,websocket就会断,所以最好还是在生命周期函数里,分别进行一次处理,,,或者自己写一个回调,在后台一直连接,不过我感觉还是在生命周期里写比较好,不然小程序会一直占用很多资源。

    2018-10-09
    赞同
    回复 4
    • 雨樵_申
      雨樵_申
      2018-10-09

      现在其实就是在后台的时候不知道回调哪个……尤其是现在在真机调试这功能里面websocket会保持在connecting但是一直不open,那么下一步的排错什么也别想执行了……怎么说呢……这种差异理当是不符合预期的吧。

      写在onshow和onhide确实可以,但是这已经不是重点了……

      我主要就想知道在实际环境里到底应该对应哪个情况……真机还是预览还是开发者工具直接看……


      2018-10-09
      回复
    • LEI
      LEI
      2018-10-09

      绝对的真机,而且最少的测试安卓和ios,更好的话,测试更多具体机型,小程序可能存在在某种机型上的不适配,或者bug。

      2018-10-09
      回复
    • LEI
      LEI
      2018-10-09回复雨樵_申

      你可以在监听关闭的事件里,写一个timeout函数,去调这个websocket的open事件,如果不成功就隔两秒调用一次。这样的话,就会一直在后台进行重连。

      2018-10-09
      回复
    • 雨樵_申
      雨樵_申
      2018-10-09回复LEI

      =_=……真是喜闻……行多谢兄台…………

      2018-10-09
      回复
  • 小熊
    小熊
    2018-10-08

    真机会有这个问题,目前是在onhide里面断开,然后onshow里面重新连接

    2018-10-08
    赞同
    回复 1
    • lstrive
      lstrive
      2018-10-09

      socket连接状态不止在一个页面使用,一个页面hide的时候断开,其他地方的消息接收不到了,也是不行的

      2018-10-09
      回复