7 changed files with 816 additions and 422 deletions
Binary file not shown.
@ -0,0 +1,184 @@ |
|||||
|
class WebSocketClass { |
||||
|
constructor(url) { |
||||
|
this.lockReconnect = false; // 是否开始重连
|
||||
|
this.wsUrl = ""; // ws 地址
|
||||
|
this.globalCallback = null; // 回调方法
|
||||
|
this.userClose = false; // 是否主动关闭
|
||||
|
this.createWebSocket(url); |
||||
|
} |
||||
|
|
||||
|
createWebSocket(url) { |
||||
|
// #ifdef H5
|
||||
|
if (typeof(WebSocket) === 'undefined') { |
||||
|
this.writeToScreen("您的浏览器不支持WebSocket,无法获取数据"); |
||||
|
return false |
||||
|
} |
||||
|
// #endif
|
||||
|
|
||||
|
// #ifdef APP-PLUS
|
||||
|
if (typeof(uni.connectSocket) === 'undefined') { |
||||
|
this.writeToScreen("您的浏览器不支持WebSocket,无法获取数据"); |
||||
|
return false |
||||
|
} |
||||
|
// #endif
|
||||
|
|
||||
|
this.wsUrl = url; |
||||
|
try { |
||||
|
// 创建一个this.ws对象【发送、接收、关闭socket都由这个对象操作】
|
||||
|
|
||||
|
// #ifdef H5
|
||||
|
this.ws = new WebSocket(this.wsUrl); |
||||
|
this.initEventHandle(); |
||||
|
// #endif
|
||||
|
|
||||
|
// #ifdef APP-PLUS
|
||||
|
let that = this |
||||
|
this.ws = uni.connectSocket({ |
||||
|
url: this.wsUrl, |
||||
|
success(data) { |
||||
|
console.log("websocket连接成功"); |
||||
|
|
||||
|
that.initEventHandle(); |
||||
|
}, |
||||
|
}); |
||||
|
// #endif
|
||||
|
} catch (e) { |
||||
|
this.reconnect(url); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// 初始化
|
||||
|
initEventHandle() { |
||||
|
/** |
||||
|
* 监听WebSocket连接打开成功 |
||||
|
*/ |
||||
|
|
||||
|
// #ifdef H5
|
||||
|
this.ws.onopen = (event) => { |
||||
|
console.log("WebSocket连接打开"); |
||||
|
}; |
||||
|
// #endif
|
||||
|
|
||||
|
// #ifdef APP-PLUS
|
||||
|
this.ws.onOpen(res => { |
||||
|
console.log('WebSocket连接打开'); |
||||
|
}); |
||||
|
// #endif
|
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 连接关闭后的回调函数 |
||||
|
*/ |
||||
|
|
||||
|
// #ifdef H5
|
||||
|
this.ws.onclose = (event) => { |
||||
|
if (!this.userClose) { |
||||
|
this.reconnect(this.wsUrl); //重连
|
||||
|
} |
||||
|
}; |
||||
|
// #endif
|
||||
|
|
||||
|
// #ifdef APP-PLUS
|
||||
|
this.ws.onClose(() => { |
||||
|
if (!this.userClose) { |
||||
|
this.reconnect(this.wsUrl); //重连
|
||||
|
} |
||||
|
}); |
||||
|
// #endif
|
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 报错时的回调函数 |
||||
|
*/ |
||||
|
|
||||
|
// #ifdef H5
|
||||
|
this.ws.onerror = (event) => { |
||||
|
if (!this.userClose) { |
||||
|
this.reconnect(this.wsUrl); //重连
|
||||
|
} |
||||
|
}; |
||||
|
// #endif
|
||||
|
|
||||
|
// #ifdef APP-PLUS
|
||||
|
this.ws.onError(() => { |
||||
|
if (!this.userClose) { |
||||
|
this.reconnect(this.wsUrl); //重连
|
||||
|
} |
||||
|
}); |
||||
|
// #endif
|
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 收到服务器数据后的回调函数 |
||||
|
*/ |
||||
|
|
||||
|
// #ifdef H5
|
||||
|
this.ws.onmessage = (event) => { |
||||
|
|
||||
|
this.globalCallback(JSON.parse(event.data)) |
||||
|
}; |
||||
|
// #endif
|
||||
|
|
||||
|
// #ifdef APP-PLUS
|
||||
|
this.ws.onMessage(event => { |
||||
|
this.globalCallback(JSON.parse(event.data)) |
||||
|
}); |
||||
|
// #endif
|
||||
|
} |
||||
|
|
||||
|
// 关闭ws连接回调
|
||||
|
reconnect(url) { |
||||
|
if (this.lockReconnect) return; |
||||
|
this.ws.close(); |
||||
|
this.lockReconnect = true; // 关闭重连,没连接上会一直重连,设置延迟避免请求过多
|
||||
|
setTimeout(() => { |
||||
|
this.createWebSocket(url); |
||||
|
this.lockReconnect = false; |
||||
|
}, 1000); |
||||
|
} |
||||
|
|
||||
|
// 发送信息方法
|
||||
|
webSocketSendMsg(msg) { |
||||
|
// #ifdef H5
|
||||
|
this.ws && this.ws.send(JSON.stringify(msg)); |
||||
|
// #endif
|
||||
|
|
||||
|
// #ifdef APP-PLUS
|
||||
|
this.ws && this.ws.send({ |
||||
|
data: JSON.stringify(msg), |
||||
|
success() { |
||||
|
console.log("消息发送成功"); |
||||
|
}, |
||||
|
fail(err) { |
||||
|
console.log("关闭失败", err) |
||||
|
} |
||||
|
}); |
||||
|
// #endif
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
// 获取ws返回的数据方法
|
||||
|
getWebSocketMsg(callback) { |
||||
|
this.globalCallback = callback |
||||
|
} |
||||
|
|
||||
|
// 关闭ws方法
|
||||
|
closeSocket() { |
||||
|
if (this.ws) { |
||||
|
this.userClose = true; |
||||
|
this.ws.close({ |
||||
|
success(res) { |
||||
|
console.log("关闭成功", res) |
||||
|
}, |
||||
|
fail(err) { |
||||
|
console.log("关闭失败", err) |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
writeToScreen(massage) { |
||||
|
console.log(massage); |
||||
|
} |
||||
|
} |
||||
|
export default WebSocketClass; |
Loading…
Reference in new issue