Administrator
2025-12-11 a818be0a541ea27e827c5b2abe956056dd66d637
src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java
@@ -52,6 +52,10 @@
    private static final String WS_URL_MONIPAN = "wss://wspap.okx.com:8443/ws/v5/private";
    private static final String WS_URL_SHIPAN = "wss://ws.okx.com:8443/ws/v5/private";
    private ScheduledExecutorService reconnectScheduler;
    private final AtomicReference<Long> lastReconnectTime = new AtomicReference<>(System.currentTimeMillis());
    /**
     * 订阅频道指令
     */
@@ -95,6 +99,10 @@
            pongTimeoutFuture.cancel(true);
        }
        shutdownExecutorGracefully(sharedExecutor);
//        if (reconnectScheduler != null) {
//            reconnectScheduler.shutdownNow();
//        }
    }
    private void shutdownExecutorGracefully(ExecutorService executor) {
@@ -266,10 +274,10 @@
            OrderInfoWs.handleEvent(response, redisUtils);
        }else if (AccountWs.ACCOUNTWS_CHANNEL.equals(channel)) {
            AccountWs.handleEvent(response, redisUtils);
        } else if (PositionsWs.POSITIONSWS_CHANNEL.equals(channel)) {
            PositionsWs.handleEvent(response, redisUtils);
            String side = caoZuoService.caoZuo();
            TradeOrderWs.orderEvent(webSocketClient, redisUtils, side);
        } else if (PositionsWs.POSITIONSWS_CHANNEL.equals(channel)) {
            PositionsWs.handleEvent(response, redisUtils);
        } else if (BalanceAndPositionWs.CHANNEL_NAME.equals(channel)) {
            BalanceAndPositionWs.handleEvent(response);
        }
@@ -291,6 +299,19 @@
        });
        heartbeatExecutor.scheduleWithFixedDelay(this::checkHeartbeatTimeout, 25, 25, TimeUnit.SECONDS);
//        // 添加每小时重连的定时任务
//        if (reconnectScheduler != null && !reconnectScheduler.isTerminated()) {
//            reconnectScheduler.shutdownNow();
//        }
//
//        reconnectScheduler = Executors.newSingleThreadScheduledExecutor(r -> {
//            Thread t = new Thread(r, "okx-scheduled-reconnect");
//            t.setDaemon(true);
//            return t;
//        });
//
//        // 每小时执行一次重连
//        reconnectScheduler.scheduleWithFixedDelay(this::performScheduledReconnect, 60, 60, TimeUnit.MINUTES);
    }
    /**
@@ -307,6 +328,15 @@
        }
    }
    private void performScheduledReconnect() {
        if (webSocketClient != null && webSocketClient.isOpen()) {
            log.info("关闭当前连接准备重连");
            webSocketClient.close();
        }
        // 更新最后重连时间
        lastReconnectTime.set(System.currentTimeMillis());
    }
    /**
     * 检查心跳超时情况。
     * 若长时间未收到任何消息则主动发送 ping 请求保持连接活跃。