收藏
回答

如何让一个websocke持续连接

        有个需求是一个websocket连接,要每个页面都需要接收这个连接的信息,所以我现在的解决方式是在首页index.js里在onShow方法里新建了一个websocket连接

onShow:function(){

  this.initSocket()

},

initSocket:function(){

  wx.connectSocket({       url:"wss://www.wukoon.com?userid=1&token=xxxxxxxxxxxxxxxxxx"

  })

  wx.onSocketOpen(function(){

      console.log(1)

  })

  wx.onSocketMessage(function(res){

      console.log(res.data)

  })

}

        但是问题就来了,我的首页是一个tabbar,我从另外一个页面一切换到这个页面,socket就新建了一个,切换到第五次之后,就有5个socket连接,因为小程序和web端是同一套接口,不允许异地登录,web端登陆之后token就会变,此时我再登录小程序会自动重新登录改变token,而我的socket连接还是之前那5个,token就变化了,此时后台就会禁止我拿信息,想问下我这个socket是要在什么时候关闭呢?

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

2 个回答

  • 吴奕群
    吴奕群
    2019-03-08

    在app的onLaunch写吧

    2019-03-08
    有用 1
    回复 6
    • 海贼王的迷妹
      海贼王的迷妹
      2019-03-11

      不能,因为onLauch只能运行一次,就是小程序初始化的时候

      2019-03-11
      1
      回复
    • 吴奕群
      吴奕群
      2019-03-11回复海贼王的迷妹

      onLauch是小程序处于活跃状态的时候才只运行一次,如果小程序5分钟没有操作了,这时候会自动关掉的,下一次再进小程序的时候就会再调用onLaunch的

      2019-03-11
      1
      回复
    • 海贼王的迷妹
      海贼王的迷妹
      2019-03-11回复吴奕群

      现在已经好啦,谢谢啦,因为我这个是登陆之后才去连接的,第一次进小程序的时候,用户没有登录,所以不会去连接,所以我就点击登录之后再去连接,之前关不掉websocket是因为我调用微信的close方法,后台那边完全收不到close的指令,不知道咋回事,后来是直接使用sendSocketMessage方法,发送与后台约定的close的命令,然后后台收到这指令就关闭了,有点不明白小程序中的socket机制,onSocketMessage按理来说应该是接收最新socket消息的,但是测试发现,它处理的一直都是旧的socket,哪怕此时我只开了两个socket连接


      2019-03-11
      1
      回复
    • 吴奕群
      吴奕群
      2019-03-14回复海贼王的迷妹

      👍

      2019-03-14
      1
      回复
    • 2019-09-21
      你好,想咨询一下,socket是不是只要跟后台链接了,不管在小程序中怎么切换页面都不会断开(除了主动切断外)
      2019-09-21
      回复
    查看更多(1)
  • 卢霄霄
    卢霄霄
    2019-03-08

    写到onLoad里?写到app.js里?

    2019-03-08
    有用
    回复
登录 后发表内容