fix 修复 websocket 非index页面刷新无法重连问题
This commit is contained in:
parent
70a3348954
commit
597f2b4461
@ -27,6 +27,14 @@ import { AppMain, Navbar, Settings, TagsView } from './components';
|
|||||||
import useAppStore from '@/store/modules/app';
|
import useAppStore from '@/store/modules/app';
|
||||||
import useSettingsStore from '@/store/modules/settings';
|
import useSettingsStore from '@/store/modules/settings';
|
||||||
|
|
||||||
|
import { initWebSocket } from '@/utils/websocket';
|
||||||
|
import useNoticeStore from '@/store/modules/notice';
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
let protocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://';
|
||||||
|
initWebSocket(protocol + window.location.host + import.meta.env.VITE_APP_BASE_API + '/resource/websocket', useNoticeStore());
|
||||||
|
});
|
||||||
|
|
||||||
const settingsStore = useSettingsStore();
|
const settingsStore = useSettingsStore();
|
||||||
const theme = computed(() => settingsStore.theme);
|
const theme = computed(() => settingsStore.theme);
|
||||||
const sidebar = computed(() => useAppStore().sidebar);
|
const sidebar = computed(() => useAppStore().sidebar);
|
||||||
|
@ -19,23 +19,22 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { getToken } from '@/utils/auth';
|
import { getToken } from '@/utils/auth';
|
||||||
import useNoticeStore from '@/store/modules/notice';
|
|
||||||
import { ElNotification } from 'element-plus';
|
import { ElNotification } from 'element-plus';
|
||||||
|
|
||||||
const { addNotice } = useNoticeStore();
|
|
||||||
|
|
||||||
let socketUrl: any = ''; // socket地址
|
let socketUrl: any = ''; // socket地址
|
||||||
let websocket: any = null; // websocket 实例
|
let websocket: any = null; // websocket 实例
|
||||||
let heartTime: any = null; // 心跳定时器实例
|
let heartTime: any = null; // 心跳定时器实例
|
||||||
let socketHeart = 0 as number; // 心跳次数
|
let socketHeart = 0 as number; // 心跳次数
|
||||||
const HeartTimeOut = 10000; // 心跳超时时间 10000 = 10s
|
const HeartTimeOut = 10000; // 心跳超时时间 10000 = 10s
|
||||||
let socketError = 0 as number; // 错误次数
|
let socketError = 0 as number; // 错误次数
|
||||||
|
let noticeStore: any = null;
|
||||||
|
|
||||||
// 初始化socket
|
// 初始化socket
|
||||||
export const initWebSocket = (url: any) => {
|
export const initWebSocket = (url: any, store: any) => {
|
||||||
if (import.meta.env.VITE_APP_WEBSOCKET === 'false') {
|
if (import.meta.env.VITE_APP_WEBSOCKET === 'false') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
noticeStore = store;
|
||||||
socketUrl = url;
|
socketUrl = url;
|
||||||
// 初始化 websocket
|
// 初始化 websocket
|
||||||
websocket = new WebSocket(url + '?Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID);
|
websocket = new WebSocket(url + '?Authorization=Bearer ' + getToken() + '&clientid=' + import.meta.env.VITE_APP_CLIENT_ID);
|
||||||
@ -100,7 +99,7 @@ export const sendSocketHeart = () => {
|
|||||||
export const reconnect = () => {
|
export const reconnect = () => {
|
||||||
if (socketError <= 2) {
|
if (socketError <= 2) {
|
||||||
clearInterval(heartTime);
|
clearInterval(heartTime);
|
||||||
initWebSocket(socketUrl);
|
initWebSocket(socketUrl, noticeStore);
|
||||||
socketError = socketError + 1;
|
socketError = socketError + 1;
|
||||||
// eslint-disable-next-line prettier/prettier
|
// eslint-disable-next-line prettier/prettier
|
||||||
console.log('socket重连', socketError);
|
console.log('socket重连', socketError);
|
||||||
@ -125,7 +124,7 @@ export const websocketonmessage = () => {
|
|||||||
if (e.data.indexOf('ping') > 0) {
|
if (e.data.indexOf('ping') > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addNotice({
|
noticeStore.addNotice({
|
||||||
message: e.data,
|
message: e.data,
|
||||||
read: false,
|
read: false,
|
||||||
time: new Date().toLocaleString()
|
time: new Date().toLocaleString()
|
||||||
|
@ -96,13 +96,6 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="Index" lang="ts">
|
<script setup name="Index" lang="ts">
|
||||||
import { initWebSocket } from '@/utils/websocket';
|
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
let protocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://';
|
|
||||||
initWebSocket(protocol + window.location.host + import.meta.env.VITE_APP_BASE_API + '/resource/websocket');
|
|
||||||
});
|
|
||||||
|
|
||||||
const goTarget = (url: string) => {
|
const goTarget = (url: string) => {
|
||||||
window.open(url, '__blank');
|
window.open(url, '__blank');
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user