创建js
import { Message } from 'element-ui'
import { getToken} from '@/utils/auth'
var url = process.env.VUE_APP_WS_API
var ws;
var tt;
var lockReconnect = false;
var clientIds = getToken()
var websocket = {
Init: function(clientIds) {
console.log(url + clientIds)
if ("WebSocket" in window) {
ws = new WebSocket(url + clientIds);
} else if ("MozWebSocket" in window) {
ws = new MozWebSocket(url + clientIds);
} else {
console.log("您的浏览器不支持 WebSocket!");
return;
}
ws.onmessage = setOnmessageMessage
ws.onclose = function(e) {
console.log("连接已关闭"+ e.code + ' ' + e.reason + ' ' + e.wasClean)
Message({
message: '连接已关闭',
type: 'error',
});
reconnect(clientIds);
}
ws.onopen = function() {
Message({
message: '连接成功',
type: 'success',
});
heartCheck.start();
}
ws.onerror = function(e) {
console.log("数据传输发生错误");
Message({
message: '数据传输发生错误',
type: 'error',
});
reconnect(clientIds)
}
},
Send:function(sender,reception,body,flag){
let data = {
sender:sender,
reception:reception,
body:body,
flag:flag
}
let msg= JSON.stringify(data)
console.log("发送消息:"+msg)
ws.send(msg)
},
wxOnclose(){
ws.onclose = function() {
console.log("连接已关闭")
Message({
message: '连接已关闭',
type: 'error',
});
reconnect(clientIds);
}
},
getWebSocket(){
return ws;
},
getStatus() {
if (ws.readyState == 0) {
return "未连接";
} else if (ws.readyState == 1) {
return "已连接";
} else if (ws.readyState == 2) {
return "连接正在关闭";
} else if (ws.readyState == 3) {
return "连接已关闭";
}
},
}
export default websocket;
async function setOnmessageMessage(event) {
console.log(event.data, '获得消息');
heartCheck.start()
window.dispatchEvent(new CustomEvent('onmessageWS', {
detail: {
data: event.data
}
}))
}
function reconnect(sname) {
if(lockReconnect) {
return;
};
lockReconnect = true;
tt && clearTimeout(tt);
tt = setTimeout(function () {
console.log("执行断线重连...")
websocket.Init(sname);
lockReconnect = false;
}, 4000);
}
var heartCheck = {
timeout: 1000 * 60 * 3,
timeoutObj: null,
serverTimeoutObj: null,
start: function(){
var self = this;
this.timeoutObj && clearTimeout(this.timeoutObj);
this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);
console.log('开始心跳检测',this.timeout);
this.timeoutObj = setTimeout(function(){
console.log('心跳检测...');
self.serverTimeoutObj = setTimeout(function() {
if(ws.readyState!=1){
ws.close();
}
}, self.timeout);
}, this.timeout)
}
}
```cpp
# 开发环境配置
ENV = 'development'
# 系统/开发环境
VUE_APP_BASE_API = '/dev'
VUE_APP_WS_API='ws:
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
import websocket from '@/utils/websocketStore.js'
Vue.prototype.websocket=websocket
import { getToken} from '@/utils/auth'
export default {
name: 'parkScreen',
data() {
return {}
},
mounted() {
that.websocket.Init(getToken())
window.addEventListener('onmessageWS', that.getSocketData,true)
} ,
destroyed() {
window.removeEventListener("onmessageWS", this.getSocketData);
},
methods: {
getSocketData (res) {
console.log('web传来的值',res)
}
}