diff --git a/src/services/socketService.js b/src/services/socketService.js index 3203f923..2e8d22cb 100644 --- a/src/services/socketService.js +++ b/src/services/socketService.js @@ -51,13 +51,21 @@ class SocketService { ...options, }); - // 注册所有暂存的事件监听器 + // 注册所有暂存的事件监听器(保留 pendingListeners,不清空) if (this.pendingListeners.length > 0) { console.log(`[socketService] 📦 注册 ${this.pendingListeners.length} 个暂存的事件监听器`); this.pendingListeners.forEach(({ event, callback }) => { - this.on(event, callback); + // 直接在 Socket.IO 实例上注册(避免递归调用 this.on()) + const wrappedCallback = (...args) => { + console.log(`%c[socketService] 🔔 收到原始事件: ${event}`, 'color: #2196F3; font-weight: bold;'); + console.log(`[socketService] 事件数据 (${event}):`, ...args); + callback(...args); + }; + + this.socket.on(event, wrappedCallback); + console.log(`[socketService] ✓ 已注册事件监听器: ${event}`); }); - this.pendingListeners = []; // 清空暂存队列 + // ⚠️ 重要:不清空 pendingListeners,保留用于重连 } // 监听连接成功 @@ -157,10 +165,18 @@ class SocketService { */ on(event, callback) { if (!this.socket) { - // Socket 未初始化,暂存监听器 - logger.info('socketService', 'Socket not ready, queuing listener', { event }); - console.log(`[socketService] 📦 Socket 未初始化,暂存事件监听器: ${event}`); - this.pendingListeners.push({ event, callback }); + // Socket 未初始化,暂存监听器(检查是否已存在,避免重复) + const exists = this.pendingListeners.some( + (listener) => listener.event === event && listener.callback === callback + ); + + if (!exists) { + logger.info('socketService', 'Socket not ready, queuing listener', { event }); + console.log(`[socketService] 📦 Socket 未初始化,暂存事件监听器: ${event}`); + this.pendingListeners.push({ event, callback }); + } else { + console.log(`[socketService] ⚠️ 监听器已存在,跳过: ${event}`); + } return; }