收藏
回答

WebSocket在小程序隐藏后关闭的问题

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

- 当前 Bug 的表现(可附上截图)


 在app.js里 每隔3秒 检查websocket断开连接的话重新连接

上图显示,app调用onShow 后,websocket连接成功

            app调用onHide后 自动断开连接

           我把 小程序打开后,又自动连接上了


- 预期表现

    希望小程序后台运行时,已连接的 WebSocket  保持连接,继续工作.

- 复现路径


- 提供一个最简复现 Demo

//app.js  

App({

globalData: {

localSocket:{}

},

getWsState:function(){  //获取WS状态

//readyState的状态有4种,0表示connecting正在链接,

//1则表示open已经链接,2则表示closing,正在关闭,3表示closed已经关闭

var state=-1;

if (this.globalData.localSocket.readyState != undefined){

state = this.globalData.localSocket.readyState;

}

return state;

},

//小程序初始化完成时触发

onLaunch: function () {

setInterval(this.jhr_ws_connect,3000);

},

onShow:function(){

console.log("app.onShow:" + this.getWsState());

},

onHide:function(){

console.log("app.onHide:" + this.getWsState());

},

//链接 WS

jhr_ws_connect:function(){

var that=this;

if(this.getWsState()== 1){return;}

that.globalData.localSocket = wx.connectSocket({

url: 'ws://192.168.1.122:10006'

});

that.globalData.localSocket.onOpen(function (res) {

console.log("globalData.localSocket.onOpen:" + that.getWsState());

});

that.globalData.localSocket.onClose(function (res) {

console.log("globalData.localSocket.onClose:"+ that.getWsState());

});

},

})


最后一次编辑于  07-18
回答关注问题邀请回答
收藏

2 个回答

  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    07-18


    07-18
    赞同
    回复 3
    • 老李
      老李
      07-18
      非常感谢!从console.log信息看,小程序没有销毁,调用onShow时返回的状态看是0. 只是WebSocket在调用onHide后关闭了,我在页面别的地方都没有处理Websocket,以上的代码为全部代码。明天我在提供一下代码片段看看
      07-18
      回复
    • 老李
      老李
      07-18
      我发布了代码片段,请帮忙看一下这个关闭是不是销毁产生的,重新启动时没有调用onLaunch
      07-18
      回复
    • 老李
      老李
      07-18
      https://developers.weixin.qq.com/s/VJFMqXm27W9h
      07-18
      回复
  • 老李
    老李
    07-18

    分享一下代码段

    https://developers.weixin.qq.com/s/VJFMqXm27W9h

    前台运行时会自动连接,进入后台后,过几秒,WebSocket 自动关闭,不是小程序销毁关闭的

    07-18
    赞同
    回复