websocket vue

vue

/* eslint-disable */

let tt;

let count = 1;

let lockReconnect = false;

function isJsonString(str) {

try {

if (typeof JSON.parse(str) === "object") {

return true;

}

} catch (e) { }

return false;

}

function reconnect(dispatch) {

if (lockReconnect || count > 5) {

return;

}

lockReconnect = true;

count = count + 1;

tt && clearTimeout(tt);

tt = setTimeout(() => {

dispatch("createWebSocket");

lockReconnect = false;

}, Math.pow(2, count) * 1000);

}

export default {

namespaced: true,

state: {

socket: {

isConnected: false,

message: "",

count: 0,

lockReconnect: false,

reconnectError: false

},

websocket: null

},

getters: {

message: state => state.socket.message,

isConnected: state => state.socket.isConnected

},

actions: {

createWebSocket({ state, commit, dispatch }) {

if ("WebSocket" in window) {

state.websocket = new WebSocket(process.env.VUE_MESSAGE_WEBSOCKET);

} else if ("MozWebSocket" in window) {

state.websocket = new MozWebSocket(process.env.VUE_MESSAGE_WEBSOCKET); // eslint-disable-line

} else {

state.websocket = new SockJS(process.env.VUE_MESSAGE_WEBSOCKET); // eslint-disable-line

}

state.websocket.onclose = () => {

reconnect(dispatch);

};

state.websocket.onerror = () => {

reconnect(dispatch);

};

state.websocket.onopen = () => {

count = 1;

commit("SOCKET_CONNECTED", true);

setInterval(() => state.websocket.send("ping"), 30000);

};

state.websocket.onmessage = event => {

if (isJsonString(event.data)) {

commit("SOCKET_MESSAGE", event.data);

}

};

},

sendMessage({ state }, message) {

return new Promise((resolve) => {

state.websocket.send(JSON.stringify(message))

resolve()

})

}

},

mutations: {

SOCKET_CONNECTED(state, isConnected) {

state.socket = {

...state.socket,

isConnected

};

},

SOCKET_MESSAGE(state, message) {

state.socket = {

...state.socket,

message

};

}

}

};

以上是 websocket vue 的全部内容, 来源链接: utcz.com/z/378516.html

回到顶部