js 封装websocket (包括心跳检测,断线重连等)
js 模块使用
export const newWebSocket = {
websocket: null,
heartbeat_timer: null, // 用于心跳检测
active_close: false, // 是否主动关闭
init: (params) => {
newWebSocket.websocket = new WebSocket(params.url)
newWebSocket.websocket.onopen = (data) => {
newWebSocket.heartbeat()
if (params.onopen) {
params.onopen(webSocket已连接, data)
}
}
newWebSocket.websocket.onmessage = (data) => {
if (params.onmessage) {
params.onmessage(data.data)
}
}
newWebSocket.websocket.onclose = () => {
clearInterval(newWebSocket.heartbeat_timer)
if (newWebSocket.active_close) {
if (params.onclose) {
params.onclose(连接已手动关闭)
}
} else {
newWebSocket.reconnect(params)
if (params.onclose) {
params.onclose(连接已关闭, 正在重连)
}
}
}
newWebSocket.websocket.onerror = () => {
clearInterval(newWebSocket.heartbeat_timer)
if (params.onerror) {
params.message(连接发生错误!等待五秒后重连)
setTimeout(() => {
newWebSocket.reconnect(params)
},5000)
}
}
},
heartbeat: () => {
console.log(执行心跳)
if (newWebSocket.heartbeat_timer) {
clearInterval(newWebSocket.heartbeat_timer)
}
newWebSocket.heartbeat_timer = setInterval(function (){
newWebSocket.websocket.send(heartbeat)
},10000)
},
reconnect: (params) => {
console.log(执行重连)
newWebSocket.active_close = false
if (newWebSocket.websocket) {
newWebSocket.websocket.close()
}
newWebSocket.init(params)
},
close: () => {
console.log(手动关闭,无需重连)
clearInterval(newWebSocket.heartbeat_timer)
newWebSocket.active_close = true
newWebSocket.websocket.close()
}
}
引入封装好的newWebSocket
import { newWebSocket } from "../../plugins/bwWebSocket";
使用方法
translateWs () {
newWebSocket.init({
url: wssUrl, // 自己的ws 地址
onopen: (msg, data) => {
console.log(msg, data)
},
onmessage: (data) => {
console.log(data)
this.handleRefresh(swim)
},
onclose: (data) => {
console.log(data)
}
})
},
页面离开前手动关闭
destroyed() {
newWebSocket.close()
},
`
mounted() {
this.translateWs()
},``
上一篇:
Java架构师技术进阶路线图
下一篇:
http协议中的GET和POST请求
