vue+websocket,封装和页面实际使用情况
一、 封装的socket.js
let webSocket = null;
let globalCallback = null;
function initWebSocket(url,headers=[]) {
if ("WebSocket" in window) {
webSocket = new WebSocket(url,headers);
console.log(webSocket)
} else {
alert("该浏览器不支持websocket!");
}
webSocket.onopen = function() {
webSocketOpen();
};
webSocket.onmessage = function(e) {
webSocketOnMessage(e);
};
webSocket.onclose = function() {
webSocketClose();
};
webSocket.onerror = function() {
console.log("WebSocket连接发生错误");
};
}
function webSocketOpen(e) {
if (e === "LOGIN") {
const data = {
type: "CONNECT",
token: sessionStorage.getItem("token") || ""
};
sendSock(data, function() {});
}
console.log("WebSocket连接成功");
}
function webSocketOnMessage(e) {
const data = JSON.parse(e.data);
globalCallback(data);
}
function webSocketSend(data) {
webSocket.send(JSON.stringify(data));
}
function webSocketClose() {
if (
webSocket.readyState === 1 &&
webSocket.url === "ws:"
) {
webSocket.close();
console.log("对话连接已关闭");
}
}
function sendSock(agentData, callback) {
globalCallback = callback;
switch (webSocket.readyState) {
case webSocket.CONNECTING:
setTimeout(function() {
webSocketSend(agentData, callback);
}, 1000);
break;
case webSocket.OPEN:
webSocketSend(agentData);
break;
case webSocket.CLOSING:
setTimeout(function() {
webSocketSend(agentData, callback);
}, 1000);
break;
case webSocket.CLOSED:
break;
default:
break;
}
}
export {
initWebSocket,
webSocketClose,
sendSock
};
二、在main.js
引用
```js
//全局发送消息
import * as socketApi from '@/utils/Socket'// 找到封装的socket.js文件
Vue.prototype.socketApi = socketApi //将其挂在原型上,这样 $socketApi就在所有的 Vue 实例中可用了
三、应用页面
data(){
return{
wsUrl: "ws://",
}},
mounted() {
this.webSocketData();
},
destroyed() {
this.socketApi.webSocketClose();
},
methods: {
getConfigResult(msg) {
this.sourceData = msg;
},
websocketSend(data) {
this.socketApi.sendSock(data, this.getConfigResult);
},
webSocketData() {
const Authorization = getToken();
this.socketApi.initWebSocket(this.wsUrl,Authorization);
this.fun()
},
fun(){
const queryRef = this.$refs.queryRef;
if (queryRef) {
const params = {
satName: queryRef.formData.sat,
dtS: queryRef.timeRange.length > 1 ? queryRef.timeRange[0] : "",
dtE: queryRef.timeRange.length > 1 ? queryRef.timeRange[1] : "",
};
this.websocketSend(params);
}
},
}