收藏
回答

小程序客户端触发onClose方法后,服务端完全接受不到

目前我们小程序开发中有遇到一个比较严重的关于 websocket 的问题。

当我们客户端在使用 websocket 的时候,遇到一个比较大的问题:当客户端收到 onClose 方法的时候,服务端并没有收到我们的 onClose 消息。下面是我们的示例代码。


function connectWebsocket(self,type) {
  let token = wx.getStorageSync('token');
  let socketUrl = `${URL.WEBSOCKET_HOST}/vfour/echo_once/?params=${token}`;
  var gameSocket = wx.connectSocket({ url: socketUrl });
  socketFlow(type);
 
  //整个websocket流程
  function socketFlow(type) {
    gameSocket.onOpen(function() {
      console.log('-------Websocket onSocketOpen---------');
    })
    gameSocket.onMessage(function(res) {
      console.log(res);
      console.log('-------Websocket onSocketMessage---------');
    })
    gameSocket.onClose(function(res) {
      gameSocket = null;
      console.log('-------Websocket onSocketClose---------');
    }
      console.log(self.$store.state.connectSocketNum,'-------------------',res);
    })
  }
}

现在就导致比如客户端关闭 wifi, 然后服务端就不知道这个客户端已经断开了。

这个问题比较严重,希望可以协助解决。

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

2 个回答

  • 边旭₁₃₅₃₀₁₁₄₃₁₈
    边旭₁₃₅₃₀₁₁₄₃₁₈
    2018-07-25

    确实有这个问题。除非知道用户什么时候切换网络,否则一旦变更网络,websocket就会断开。

    2018-07-25
    有用
    回复
  • 机智的毛豆
    机智的毛豆
    2018-07-13

    客户端调用 gameSocket.close() 了?

    2018-07-13
    有用
    回复 1
    • 张子浩
      张子浩
      2018-07-14

      是的,客户端主动调用 gameSocket.close()

      但是服务端收不到客户端关掉的信息

      2018-07-14
      回复
登录 后发表内容