收藏
回答

sendSocketMessage: fail taskID not exist

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug sendSocketMessage 和 SocketTask.send 客户端 7.0.4.43 2.7.0

//创建连接

if (!this._socketTask || this._socketTask.readyState!=1) {

  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

    try{

     //wx.sendSocketMessage ({})使用sendSocketMessage 同样会出现

      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

微信版本: 7.0.4

基础库版本:2.7.0





回答关注问题邀请回答
收藏

8 个回答

  • ShinBlueCat
    ShinBlueCat
    2019-05-24

    这里看日志是 切后台一段时间以后 socket就被关闭了

    可以监听socket的close事件,然后重新创建socket

    2019-05-24
    有用
    回复 1
    • Geefib
      Geefib
      2019-05-24

      恩恩,重新创建的socket也是成功的,readystate也是1,open状态。但是发不出消息,报 sendSocketMessage: fail 。taskID not exist。,如截图(19:19分的时候)。我为了保持socket一直在线,会每隔3秒发一次心跳,心跳发送就是报这个错呢,日志中看不到发送消息失败吗?

      2019-05-24
      回复
  • 社区技术运营专员-小柿子
    社区技术运营专员-小柿子
    2019-05-22

    错误日志已上传2019-05-21=>麻烦重新复现并提交下日志以及提供提交时候的微信号以及具体时间

    2019-05-22
    有用
    回复 7
    查看更多(2)
  • 陈式坚
    陈式坚
    2019-12-20

    同样遇到,表现是成功链接以后,如果遇到断网。

    第一个是 Ios会同时触发onClose和onError,安卓则只触发onClose

    第二个是 进行重连的时候,安卓端表现正常,旧的websoket会被清除,而Ios则不会,Ios只会显示「taskId not exist」

    第三个是 进行重连的时候,如果还是没有网络,安卓端只会触发onError,而Ios则会触发onClose和onError....


    导致Ios端无限触发onClose,指数增长,创建无数实例


    很明显就是两端表现不同步,Ios端逻辑有错误,或者安卓端没完整


    解决办法是

    第一个是,限制重连次数,避免无限创建实例

    第二个是,加上链接成功的标识,保证链接成功后,onClose的只会触发一次


    2019-12-20
    有用 3
    回复
  • Alan
    Alan
    2019-06-11

    这个巨坑,其实是这样的,小程序websocket在连接超时或者网络切换(4g切换3g,3g切换2g)的时候,webscokt的回调函数存在异常。测试下来发现小程序websocket会先走onerror回调,wss协议这时候会关闭该连接,导致taskID已经被清空,但是后面又回回调onopen这个生命周期,此时readystate变为1。解决方案目前想到的就是强制重连,也希望微信官方能早日修复该bug

    2019-06-11
    有用 2
    回复 7
    • 良
      2019-06-13

      你能复现一下这个场景,然后上传一下日志,提供一下你的微信号和复现的时间点吗?

      2019-06-13
      回复
    • Alan
      Alan
      2019-06-14

      OK,微信号 qyd893533694 复现时间 2019/6/19 10:16-10:17  复现多次。日志已上传。

      复现方式,config里配置wss连接超时为1s,移动端接入弱网,延迟1000ms比如,稳定先回调onerror, connect timeout 。然后onopen, 接下来就是taskiD not exist.

      顺便问一句,小程序的wss怎么比较好的进行弱网测试~

      2019-06-14
      回复
    • 良
      2019-06-14回复Alan

      只看到了10:08,10:09 的请求,都是成功的,麻烦你复现一下之后等几分钟,之后再次上传一下日志

      2019-06-14
      回复
    • 郝慧敏
      郝慧敏
      2019-06-20

      我也遇到了同样问题,请问你最后怎么处理的

      2019-06-20
      回复
    • Alan
      Alan
      2019-06-20回复郝慧敏

      重新连接一个新的socket

      2019-06-20
      回复
    查看更多(2)
  • 张勇
    张勇
    06-23

    sendSocketMessage: fail taskID not exist 。这个问题解决了吗?遇到同样的问题了。


    06-23
    有用
    回复
  • Bigbrother
    Bigbrother
    05-26

    断网之后就这样一直保错 我用的是mqtt 链接的

    05-26
    有用
    回复 3
    • Geefib
      Geefib
      05-27
      应该是建一个socket链接就起一个socket实例,原来的socket实例已经被销毁了,所以close的时候id对不上
      05-27
      回复
    • Bigbrother
      Bigbrother
      05-27回复Geefib
      有解决方案吗
      05-27
      回复
    • Geefib
      Geefib
      05-27回复Bigbrother
      close了原来的链接之后,在new新的socket
      05-27
      回复
  • 绛ོ珠ོ璃ོ落ོ
ོ
    绛ོ珠ོ璃ོ落ོ ོ
    2019-12-16

    我这边测试表现是:从菜单栏打开小程序,socket正常,从服务号点击进入,readyState一直显示是0,想强制关闭后重新创建socket,结果close失败,显示closeSocket:fail:taskId not exist;如果忽略关闭失败,即便重连,状态依旧不会变成1,只能让用户重启小程序才行。

    2019-12-16
    有用
    回复 1
    • Geefib
      Geefib
      2019-12-20
      目前有什么其它好的方法吗?除了只能让用户重启小程序才行。
      2019-12-20
      回复
  • Geefib
    Geefib
    2019-05-22

    taskID not exist 是什么原因报错

    2019-05-22
    有用
    回复
登录 后发表内容