开发工具版本: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
我也遇到这个问题
我看API不是必须是SSL的wss吗协议吗?居然第一次可以连上。bug
本机开发可以暂时不wss。