From 6584cbef8a5829950c20b507e17445b97650e73f Mon Sep 17 00:00:00 2001 From: hcong <1050828145@qq.com> Date: 星期三, 27 十一月 2024 12:15:04 +0800 Subject: [PATCH] 1. 新增消息管理类 2. socket消息类型js改为枚举类 3. 重连函数在使用时以参数传递进来 --- src/socket/FYWebSocket.js | 48 +++++++++++++++++++++++------------------------- 1 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/socket/FYWebSocket.js b/src/socket/FYWebSocket.js index 80f00c3..0243462 100644 --- a/src/socket/FYWebSocket.js +++ b/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); } } -- Gitblit v1.9.3