package com.nq.ws; import com.nq.enums.EStockType; import com.nq.utils.PropertiesUtil; import lombok.extern.slf4j.Slf4j; import org.java_websocket.client.WebSocketClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.net.URI; import java.util.HashMap; import java.util.Map; @Slf4j @Configuration public class WebSocketClientBeanConfig { @Bean public Map websocketRunClientMap() { Map retMap = new HashMap<>(2); // try { // JPWebsocketRunClient jpWebsocketRunClient = new JPWebsocketRunClient(new URI(PropertiesUtil.getProperty("JP_WS_URL")), EStockType.JP); // jpWebsocketRunClient.connect(); // jpWebsocketRunClient.setConnectionLostTimeout(0); // startHeartbeatThread(jpWebsocketRunClient); // retMap.put(EStockType.JP.getStockKey(), jpWebsocketRunClient); // } catch (Exception e) { // log.error("jpWebsocketRunClient 异常: {}", e.getMessage()); // } try { USWebsocketRunClient usWebsocketRunClient = new USWebsocketRunClient(new URI(PropertiesUtil.getProperty("US_WS_URL")), EStockType.US); usWebsocketRunClient.connect(); usWebsocketRunClient.setConnectionLostTimeout(0); startHeartbeatThread(usWebsocketRunClient); retMap.put(EStockType.US.getStockKey(), usWebsocketRunClient); } catch (Exception e) { log.error("usWebsocketRunClient 异常: {}", e.getMessage()); } return retMap; } private void startHeartbeatThread(WebSocketClient client) { new Thread(() -> { while (true) { try { Thread.sleep(8000); if (client.isOpen()) { // 先检查连接状态 client.send("heartbeat".getBytes()); } else { client.reconnect(); client.setConnectionLostTimeout(0); } } catch (Exception e) { log.error("心跳线程异常, 尝试重连: {}", e.getMessage()); try { client.reconnect(); client.setConnectionLostTimeout(0); } catch (Exception re) { log.error("重连失败: {}", re.getMessage()); } } } }).start(); } }