收藏
回答

websocket断开重连总是无法实现

开发工具版本:1.02.1805181

需求简述:使用小程序扫描电脑浏览器页面中的二维码,小程序通过WebSocket发送数据到我司的服务器。启动远程调试后,第一次测试都OK。但稍等,再次测试失败。我尝试了传统的wx.onSocketOpen写法,也试了SocketTask写法,都无法做到失败重连。请大神协助,谢谢!

// websocket.js
const app = getApp();

let url = 'ws://10.13.18.151:9092';

export const connect = function (callbackFunc) {  // 定义一个方法
  var SocketTask = wx.connectSocket({
    url: url,
    success: function () {
      console.log('wx.connectSocket成功');
    },
    fail: function(err) {
      if (err) {
        console.log('###### wx.connectSocket连接失败', err)
        app.globalData.socketConnectFail = true // 定义一个全局变量,当链接失败时改变变量的值
      }
    },
    complete: function () {
      console.log('wx.connectSocket完成');
    }
  })

  SocketTask.onOpen(function (res) { // 监听WebSocket连接打开事件。
    console.log('进入wx.onSocketOpen()');
    SocketTask.send({ // 通过 WebSocket 连接发送数据,需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。
      data: '9999999999999999999999999999999999', // 用于订阅的参数,视具体情况而定
      success(data) {
        console.log('wx.sendSocketMessage成功:', data.errMsg)
      },
      fail(err) {
        console.log('wx.sendSocketMessage失败', err)
        console.dir(err);
      }
    })

  })

  SocketTask.onMessage(function (res) { // 监听WebSocket接受到服务器的消息事件。
    console.log('WebSocket接收到消息:', res);
    callbackFunc(res.data); // 将接收到的消息进行回调,如果是ArryBuffer,需要进行转换
  })

  SocketTask.onError(function (res) { // 监听WebSocket错误。
    console.log('###### wx.onSocketError');
    app.globalData.socketConnectFail = true // 定义一个全局变量,当链接失败时改变变量的值
  })

  SocketTask.onClose(function (res) { // 监听WebSocket关闭。
    console.log('###### wx.onSocketClose');
    app.globalData.socketConnectFail = true // 定义一个全局变量,当链接失败时改变变量的值
  })
};


// mySome.js
let openSocket = require('../../utils/websocket.js');

    wx.scanCode({
      success: (res) => {
        console.log(res);
        console.log('扫码成功,通知server端');
        
        // 格式:resume/myResume?randomKey=a8b23ab8-223d-4893-afd3-22a6b279e256
        let path = res.path;
        let index01 = path.indexOf('randomKey=');
        let randomKey = path.substring(index01 + 10); // 10是randomKey=的长度
        console.log('path=' + path);
        console.log('index01=' + index01);
        console.log('randomKey=' + randomKey);

        let wsUrl = app.globalData.webSocketName;
        console.log('wsUrl=' + wsUrl);

        // 第三版开始
        openSocket.connect(function(data) { // WebSocket初始化连接
          console.log('成功回调OOOOOOOOOOOOOOOOOOOOOOOOOOOO');
        });

        if (app.globalData.socketConnectFail) { // WebSocket断线重连
          setInterval(() => {
            console.log('###### 进入setInterval()');
            openSocket.connect(function(data) {
              console.log('成功回调!!!!!!!!!!!!!!!!!!!!!!!!!!');
            });
          }, 5000)
        }
        // 第三版结束


/////////////////////////  控制台摘录

websocket.js? [sm]:9 wx.connectSocket成功
websocket.js? [sm]:18 wx.connectSocket完成
websocket.js? [sm]:43 ###### wx.onSocketError

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

2 个回答

  • wanna
    wanna
    2018-06-20

    我也遇到这个问题

    2018-06-20
    赞同
    回复
  • 卢霄霄
    卢霄霄
    2018-05-31

    我看API不是必须是SSL的wss吗协议吗?居然第一次可以连上。bug

    2018-05-31
    赞同
    回复 1
    • 金健康
      金健康
      2018-05-31

      本机开发可以暂时不wss。

      2018-05-31
      回复