fix 修复 websocket 非index页面刷新无法重连问题

This commit is contained in:
疯狂的狮子Li 2023-12-23 19:38:34 +08:00
parent 70a3348954
commit 597f2b4461
3 changed files with 13 additions and 13 deletions

View File

@ -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);

View File

@ -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()

View File

@ -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');
}; };