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/index.js | 148 +++++------------------------------------------- 1 files changed, 17 insertions(+), 131 deletions(-) diff --git a/src/socket/index.js b/src/socket/index.js index 35d8feb..ce75986 100644 --- a/src/socket/index.js +++ b/src/socket/index.js @@ -1,134 +1,20 @@ -import eventBus from './eventBus.js'; -import { messageTypes } from '@/enum/socketMessage.js'; -import { encodeMessage, decodeMessage } from './socketMessage.js'; -import { $socket_base_url } from '@/api/index.js'; -class FYWebSocket extends WebSocket { - constructor() { - super($socket_base_url); - return this; - } - /** - * heartBeatConfig 蹇冭烦杩炴帴鍙傛暟 - * time: 蹇冭烦鏃堕棿闂撮殧 - * timeout: 蹇冭烦瓒呮椂闂撮殧 - * reconnect: 鏂嚎閲嶈繛鏃堕棿闂撮殧 - * isReconnect 鏄惁鏂嚎閲嶈繛 - */ - init(heartBeatConfig, isReconnect) { - this.onopen = this.openHandler; // 杩炴帴鎴愬姛鍚庣殑鍥炶皟鍑芥暟 - this.onclose = this.closeHandler; // 杩炴帴鍏抽棴鍚庣殑鍥炶皟 鍑芥暟 - this.onmessage = this.messageHandler; // 鏀跺埌鏈嶅姟鍣ㄦ暟鎹悗鐨勫洖璋冨嚱鏁� - this.onerror = this.errorHandler; // 杩炴帴鍙戠敓閿欒鐨勫洖璋冩柟娉� - this.heartBeatConfig = heartBeatConfig; // 蹇冭烦杩炴帴閰嶇疆鍙傛暟 - this.isReconnect = isReconnect; // 璁板綍鏄惁鏂嚎閲嶈繛 - this.reconnectTimer = null; // 璁板綍鏂嚎閲嶈繛鐨勬椂闂村櫒 - this.startHeartBeatTimer = null; // 璁板綍蹇冭烦鏃堕棿鍣� - this.webSocketState = false; // 璁板綍socket杩炴帴鐘舵�� true涓哄凡杩炴帴 - } - // 鑾峰彇娑堟伅 - getMessage({ data }) { - return decodeMessage(data); - } - // 鍙戦�佹秷鎭� - sendMessage(type, data) { - return this.send(encodeMessage(type, data)); - } - // 杩炴帴鎴愬姛鍚庣殑鍥炶皟鍑芥暟 - openHandler() { - console.log('====onopen 杩炴帴鎴愬姛===='); - // socket鐘舵�佽缃负杩炴帴锛屽仛涓哄悗闈㈢殑鏂嚎閲嶈繛鐨勬嫤鎴櫒 - this.webSocketState = true; - // 鍒ゆ柇鏄惁鍚姩蹇冭烦鏈哄埗 - if (this.heartBeatConfig && this.heartBeatConfig.time) { - this.startHeartBeat(this.heartBeatConfig.time); - } - } - // 鏀跺埌鏈嶅姟鍣ㄦ暟鎹悗鐨勫洖璋冨嚱鏁� - messageHandler(res) { - const webSocketMsg = this.getMessage(res); - if (!(webSocketMsg && webSocketMsg != null && webSocketMsg != {})) { - return; - } - const type = webSocketMsg.type; - const data = webSocketMsg.data - - switch (type) { - case '1': // 鍚庡彴浠诲姟 - // 鍙戦�佷簨浠� - eventBus.emit('1', data); - console.log('====onmessage 鍚庡彴浠诲姟====', data); - break; - case '2': // 涓氬姟鏃ュ織 - // 鍙戦�佷簨浠� - eventBus.emit('2', data); - console.log('====onmessage 涓氬姟鏃ュ織====', data); - break; - case '0': // 蹇冭烦妫�娴� - // 灏嗚繛鎺ョ姸鎬佹洿鏂颁负鍦ㄧ嚎 - this.webSocketState = true; - eventBus.emit('0', data); - console.log('====onmessage 蹇冭烦妫�娴�====', data); - break; - } - } - // 杩炴帴鍏抽棴鍚庣殑鍥炶皟 鍑芥暟 - closeHandler() { - console.log('====onclose websocket鍏抽棴杩炴帴===='); - // 璁剧疆socket鐘舵�佷负鏂嚎 - this.webSocketState = false; - // 鍦ㄦ柇寮�杩炴帴鏃� 娓呴櫎蹇冭烦鏃堕棿鍣ㄥ拰 鏂紑閲嶈繛鏃堕棿鍣� - this.startHeartBeatTimer && clearTimeout(this.startHeartBeatTimer); - this.reconnectTimer && clearTimeout(this.reconnectTimer); - this.reconnectWebSocket(); - } - errorHandler() { - console.log('====onerror websocket杩炴帴鍑洪敊===='); - // 璁剧疆socket鐘舵�佷负鏂嚎 - this.webSocketState = false; - // 閲嶆柊杩炴帴 - this.reconnectWebSocket(); - } +import { FYWebSocket } from '@/socket/FYWebSocket.js'; +import MessageManager from '@/socket/MessageManager.js'; - // 蹇冭烦鍒濆鍖栨柟娉� time锛氬績璺抽棿闅� - startHeartBeat(time) { - this.startHeartBeatTimer = setTimeout(() => { - // 瀹㈡埛绔瘡闅斾竴娈垫椂闂村悜鏈嶅姟绔彂閫佷竴涓績璺虫秷鎭� - this.sendMessage(messageTypes[0].value, Date.now()); - this.waitingServer(); - }, time); - } - //鍦ㄥ鎴风鍙戦�佹秷鎭箣鍚庯紝寤舵椂绛夊緟鏈嶅姟鍣ㄥ搷搴�,閫氳繃webSocketState鍒ゆ柇鏄惁杩炵嚎鎴愬姛 - waitingServer() { - this.webSocketState = false; - setTimeout(() => { - // 杩炵嚎鎴愬姛鐘舵�佷笅 缁х画蹇冭烦妫�娴� - if (this.webSocketState) { - this.startHeartBeat(this.heartBeatConfig.time); - return; - } - console.log('蹇冭烦鏃犲搷搴�, 宸茬粡鍜屾湇鍔$鏂嚎'); - // 閲嶆柊杩炴帴鏃讹紝璁板緱瑕佸厛鍏抽棴褰撳墠杩炴帴 - try { - this.close(); - } catch (error) { - console.log('褰撳墠杩炴帴宸茬粡鍏抽棴'); - } - // // 閲嶆柊杩炴帴 - // this.reconnectWebSocket() - }, this.heartBeatConfig.timeout); - } +let socket = null; - // 閲嶆柊杩炴帴 - reconnectWebSocket() { - // 鍒ゆ柇鏄惁鏄噸鏂拌繛鎺ョ姸鎬�(鍗宠鍔ㄧ姸鎬佹柇绾�)锛屽鏋滄槸涓诲姩鏂嚎鐨勪笉闇�瑕侀噸鏂拌繛鎺� - if (!this.isReconnect) { - return; - } - // 鏍规嵁浼犲叆鐨勬柇绾块噸杩炴椂闂撮棿闅� 寤舵椂杩炴帴 - this.reconnectTimer = setTimeout(() => { - // 瑙﹀彂閲嶆柊杩炴帴浜嬩欢 - eventBus.emit('reconnect'); - }, this.heartBeatConfig.reconnect); - } +// 杩炴帴websocket +function connectWebSocket() { + socket = new FYWebSocket(); + socket.init(() => { + connectWebSocket(); + }, MessageManager); + return socket; } -export { FYWebSocket }; +/** + * 鍒濆鍖杝ocket瀹㈡埛绔� + */ +function initSocketClient() { + connectWebSocket(); +} +export { initSocketClient }; -- Gitblit v1.9.3