From 672f2cf6d8d87dffb5713067b3545e74f544cca7 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 24 Jun 2026 15:28:17 +0800
Subject: [PATCH] refactor(okxApi): 分离公有和私有频道连接状态管理

---
 src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java |   17 +++++++++++------
 1 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java b/src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java
index 15612fd..1bd14b6 100644
--- a/src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java
+++ b/src/main/java/com/xcong/excoin/modules/okxApi/OkxKlineWebSocketClient.java
@@ -131,8 +131,11 @@
     /** 私有频道连接状态 */
     private final AtomicBoolean isPrivateConnected = new AtomicBoolean(false);
 
-    /** 连接中标记,防重入 */
-    private final AtomicBoolean isConnecting = new AtomicBoolean(false);
+    /** 公开频道连接中标记,防重入 */
+    private final AtomicBoolean isPublicConnecting = new AtomicBoolean(false);
+
+    /** 私有频道连接中标记,防重入 */
+    private final AtomicBoolean isPrivateConnecting = new AtomicBoolean(false);
 
     /** 初始化标记,防重复 init */
     private final AtomicBoolean isInitialized = new AtomicBoolean(false);
@@ -302,7 +305,8 @@
         String wsUrl = isPrivate ? config.getWsPrivateUrl() : config.getWsPublicUrl();
         String label = isPrivate ? "私有" : "公开";
 
-        if (isConnecting.get() || !isConnecting.compareAndSet(false, true)) {
+        AtomicBoolean connectingFlag = isPrivate ? isPrivateConnecting : isPublicConnecting;
+        if (connectingFlag.get() || !connectingFlag.compareAndSet(false, true)) {
             log.info("[OKX-WS] 连接进行中,跳过重复{} WS请求", label);
             return;
         }
@@ -315,7 +319,7 @@
                 @Override
                 public void onOpen(ServerHandshake handshake) {
                     log.info("[OKX-WS] {} WS连接成功", label);
-                    isConnecting.set(false);
+                    connectingFlag.set(false);
 
                     if (isPrivate) {
                         isPrivateConnected.set(true);
@@ -351,7 +355,7 @@
                     } else {
                         isPublicConnected.set(false);
                     }
-                    isConnecting.set(false);
+                    connectingFlag.set(false);
                     cancelPongTimeout();
 
                     if (sharedExecutor != null && !sharedExecutor.isShutdown() && !sharedExecutor.isTerminated()) {
@@ -372,6 +376,7 @@
                 @Override
                 public void onError(Exception ex) {
                     log.error("[OKX-WS] {} WS发生错误", label, ex);
+                    connectingFlag.set(false);
                     if (isPrivate) {
                         isPrivateConnected.set(false);
                     } else {
@@ -389,7 +394,7 @@
             }
         } catch (URISyntaxException e) {
             log.error("[OKX-WS] URI格式错误: {}", wsUrl, e);
-            isConnecting.set(false);
+            connectingFlag.set(false);
         }
     }
 

--
Gitblit v1.9.1