src/components/bg-task/FYBgTaskCard.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/enum/socketMessage.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/socket/FYWebSocket.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/socket/MessageManager.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/socket/index.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/socket/socketMessage.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/components/bg-task/FYBgTaskCard.vue
@@ -46,7 +46,8 @@ import { useFetchData } from '@/composables/fetchData'; import bgtaskApi from '@/api/fysp/bgtaskApi'; import { enumBgTask, BG_TASK_TYPE, BG_TASK_STATUS } from '@/enum/bgTask'; import eventBus from '@/socket/eventBus.js'; import { SOCKET_MESSAGE_TYPE } from '@/enum/socketMessage'; import MessageManager from '@/socket/MessageManager.js'; export default { setup() { @@ -79,7 +80,7 @@ }, methods: { registerBgTaskMessage() { eventBus.register('background_task', (data) => { MessageManager.register(SOCKET_MESSAGE_TYPE.BACKGROUND_TASK.name, (data) => { this.refreshTaskById(data) }) }, src/enum/socketMessage.js
@@ -1,17 +1,29 @@ const messageTypes = [ { id: 0, value: '0', label: 'å¿è·³æºå¶', name: 'heartbeat' }, { id: 1, value: '1', label: 'åå°ä»»å¡', name: 'background_task' }, { id: 2, value: '2', label: 'ä¸å¡æ¥å¿', name: 'business_log' } ]; import { Enum } from './enum'; const SOCKET_MESSAGE_TYPE = Enum({ BACKGROUND_TASK: { id: 1, value: '1', label: 'åå°ä»»å¡', name: 'background_task' }, BUSINESS_LOG: { id: 2, value: '2', label: 'ä¸å¡æ¥å¿', name: 'business_log' } }); /** * æ ¹æ®socketæ¶æ¯ç±»ååæ®µå¾å°è¿ä¸ªç±»å对象 * @param {*} value socketæ¶æ¯ç±»å * @returns 对åºçæ¶æ¯ç±»å对象 */ /** * éè¿åç§°æ¥æ¾æä¸¾ç±» * @param {String} value * @returns */ function getByValue(value) { return messageTypes.find((v) => v.value == value); for (const type in SOCKET_MESSAGE_TYPE) { const typeObj = SOCKET_MESSAGE_TYPE[type] if (typeObj.value == value) { return typeObj } } } function isHeartbeatMessageByType(type) { return type == '0'; } export { messageTypes, getByValue, isHeartbeatMessageByType }; export { SOCKET_MESSAGE_TYPE, getByValue }; src/socket/FYWebSocket.js
@@ -1,9 +1,4 @@ import eventBus from './eventBus.js'; import { messageTypes, getByValue, isHeartbeatMessageByType } from '@/enum/socketMessage.js'; import { SOCKET_MESSAGE_TYPE, getByValue } from '@/enum/socketMessage.js'; import { encodeMessage, decodeMessage } from './socketMessage.js'; import { $socket_base_url } from '@/api/index.js'; class FYWebSocket extends WebSocket { @@ -16,15 +11,22 @@ * time: å¿è·³æ¶é´é´é * timeout: å¿è·³è¶ æ¶é´é * reconnect: æçº¿éè¿æ¶é´é´é * isReconnect æ¯å¦æçº¿éè¿ * reconnectFunc æçº¿éè¿å½æ° * messageManager æ¶æ¯ç®¡çå¨ */ init(heartBeatConfig, isReconnect) { init(reconnectFunc, messageManager) { this.onopen = this.openHandler; // è¿æ¥æååçåè°å½æ° this.onclose = this.closeHandler; // è¿æ¥å ³éåçåè° å½æ° this.onmessage = this.messageHandler; // æ¶å°æå¡å¨æ°æ®åçåè°å½æ° this.onerror = this.errorHandler; // è¿æ¥åçé误çåè°æ¹æ³ this.heartBeatConfig = heartBeatConfig; // å¿è·³è¿æ¥é ç½®åæ° this.isReconnect = isReconnect; // è®°å½æ¯å¦æçº¿éè¿ this.heartBeatConfig = { time: 30 * 1000, timeout: 2 * 1000, reconnect: 30 * 1000 }; // å¿è·³è¿æ¥é ç½®åæ° this.isReconnect = typeof reconnectFunc === 'function'; // è®°å½æ¯å¦æçº¿éè¿ this.reconnectFunc = reconnectFunc; // æçº¿éè¿å½æ° this.messageManager = messageManager; // æ¶æ¯å¤ç管çå¨ this.reconnectTimer = null; // è®°å½æçº¿éè¿çæ¶é´å¨ this.startHeartBeatTimer = null; // è®°å½å¿è·³æ¶é´å¨ this.webSocketState = false; // è®°å½socketè¿æ¥ç¶æ trueä¸ºå·²è¿æ¥ @@ -39,7 +41,7 @@ } // è¿æ¥æååçåè°å½æ° openHandler() { console.log('====onopen è¿æ¥æå===='); console.log('====onopen websocketè¿æ¥æå===='); // socketç¶æè®¾ç½®ä¸ºè¿æ¥ï¼å为åé¢çæçº¿éè¿çæ¦æªå¨ this.webSocketState = true; // 夿æ¯å¦å¯å¨å¿è·³æºå¶ @@ -53,22 +55,17 @@ if (!(webSocketMsg && webSocketMsg != null && webSocketMsg != {})) { return; } console.log("webSocketMsg", webSocketMsg); const type = webSocketMsg.type; const data = webSocketMsg.data; let typeObj = getByValue(type); console.log("typeObj", typeObj); if (isHeartbeatMessageByType(type)) { if (type == 0) { // å°è¿æ¥ç¶ææ´æ°ä¸ºå¨çº¿ this.webSocketState = true; eventBus.emit(typeObj.name, data); console.log('====onmessage å¿è·³æ£æµ====', data); console.log('====onmessage websocketå¿è·³æ£æµ====', data); } else { // åéäºä»¶ eventBus.emit(typeObj.name, data); console.log(`====onmessage ${typeObj.label}====`, data); this.messageManager.emit(typeObj.name, data); console.log(`====onmessage websocket${typeObj.label}====`, data); } } // è¿æ¥å ³éåçåè° å½æ° @@ -93,7 +90,7 @@ startHeartBeat(time) { this.startHeartBeatTimer = setTimeout(() => { // 客æ·ç«¯æ¯é䏿®µæ¶é´åæå¡ç«¯åéä¸ä¸ªå¿è·³æ¶æ¯ this.sendMessage(messageTypes[0].value, Date.now()); this.sendMessage('0', Date.now()); this.waitingServer(); }, time); } @@ -106,12 +103,12 @@ this.startHeartBeat(this.heartBeatConfig.time); return; } console.log('å¿è·³æ ååº, å·²ç»åæå¡ç«¯æçº¿'); console.log('websocket å¿è·³æ ååº, å·²ç»åæå¡ç«¯æçº¿'); // éæ°è¿æ¥æ¶ï¼è®°å¾è¦å å ³éå½åè¿æ¥ try { this.close(); } catch (error) { console.log('å½åè¿æ¥å·²ç»å ³é'); console.log('websocket å½åè¿æ¥å·²ç»å ³é'); } // // éæ°è¿æ¥ // this.reconnectWebSocket() @@ -126,8 +123,9 @@ } // æ ¹æ®ä¼ å ¥çæçº¿éè¿æ¶é´é´é å»¶æ¶è¿æ¥ this.reconnectTimer = setTimeout(() => { // 触åéæ°è¿æ¥äºä»¶ eventBus.emit('reconnect'); // 触åéæ°è¿æ¥å½æ° console.log('====onerror websocketå°è¯éè¿===='); this.reconnectFunc(); }, this.heartBeatConfig.reconnect); } } src/socket/MessageManager.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ import eventBus from './eventBus.js'; class MessageManager { constructor() { this.messageHandler = eventBus; } /** * 注åäºä»¶ * @param {*} eventType äºä»¶ç±»å * @param {*} handler äºä»¶å¤ç彿° */ register(eventType, handler) { this.messageHandler.register(eventType, handler); } /** * åéäºä»¶ * @param {*} eventType äºä»¶ç±»å * @param {...any} ars äºä»¶å 容 */ emit(eventType, ...ars) { this.messageHandler.emit(eventType, ...ars); } } const instance = new MessageManager(); Object.freeze(instance); // 鲿¢ä¿®æ¹å®ä¾ export default instance; src/socket/index.js
@@ -1,31 +1,20 @@ import { FYWebSocket } from '@/socket/FYWebSocket.js' import eventBus from '@/socket/eventBus.js'; import { FYWebSocket } from '@/socket/FYWebSocket.js'; import MessageManager from '@/socket/MessageManager.js'; let socket = null; // è¿æ¥websocket function connectWebSocket() { if (socket == null) { socket = new FYWebSocket() } socket.init({ time: 4 * 1000, timeout: 2 * 1000, reconnect: 3 * 1000 }, true) socket = new FYWebSocket(); socket.init(() => { connectWebSocket(); }, MessageManager); return socket; } // æçº¿éè¿websocket function startReconnectWebSocket() { eventBus.register('reconnect', () => { connectWebSocket() }) } /** * åå§åsocket客æ·ç«¯ */ function initSocketClient() { connectWebSocket(); startReconnectWebSocket(); } export { initSocketClient } export { initSocketClient }; src/socket/socketMessage.js
@@ -1,4 +1,3 @@ import { messageTypes } from '@/enum/socketMessage.js' // å¼å§ç¬¦å·åç»æç¬¦å·åå«ä¸º '##' å '%%', åé符为 && // å¼å§ç¬¦å· const startStr = '##'; @@ -35,7 +34,7 @@ const type = parts[0]; let data = JSON.parse(parts[1]); return { type: messageTypes.find((item) => item.value == type).value, type: type, data: data }; }