// 测试断开连接逻辑的简化示例 public class DisconnectTest { // 模拟现有的断开逻辑 public void disconnectFromGameServer(String connecId) { System.out.println("=== 断开连接流程 ==="); // 1. 标记为非活跃 System.out.println("1. 标记连接为非活跃状态"); // 2. 停止监视器(定时任务) System.out.println("2. 停止连接监视器定时任务"); // 这里会 cancel ScheduledFuture 任务 // 3. 移除事件监听器 System.out.println("3. 移除 TaurusClient 事件监听器"); // 这里会调用 client.removeEventListener() // 4. 物理断开连接 System.out.println("4. 物理断开 TCP 连接"); System.out.println("=== 断开完成 ===\n"); } public static void main(String[] args) { DisconnectTest test = new DisconnectTest(); System.out.println("场景1: 正常主动断开"); test.disconnectFromGameServer("robot_123"); System.out.println("场景2: 如果只移除事件监听器会发生什么?"); System.out.println("- 定时任务仍在后台运行"); System.out.println("- 可能会继续尝试检测已断开的连接"); System.out.println("- 造成资源浪费和潜在的并发问题\n"); System.out.println("结论: 两个操作缺一不可!"); System.out.println("• removeEventListeners: 防止接收网络事件"); System.out.println("• stopConnectionWatcher: 释放定时任务资源"); } }