| | |
| | | package com.nq.ws; |
| | | |
| | | |
| | | import com.nq.constant.StockConstant; |
| | | 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; |
| | |
| | | public Map<String, WebSocketClient> websocketRunClientMap() { |
| | | |
| | | Map<String, WebSocketClient> retMap = new HashMap<>(2); |
| | | |
| | | |
| | | |
| | | |
| | | try { |
| | | WebsocketRunClient websocketRunClient = new WebsocketRunClient(new URI(StockConstant.WS_URL)); |
| | | WebsocketRunClient websocketRunClient = new WebsocketRunClient( |
| | | new URI(PropertiesUtil.getProperty("JS_IN_WS_URL")), EStockType.IN); |
| | | websocketRunClient.connect(); |
| | | websocketRunClient.setConnectionLostTimeout(0); |
| | | retMap.put(EStockType.IN.getCode(), websocketRunClient); |
| | | new Thread(() -> { |
| | | while (true) { |
| | | while (!Thread.currentThread().isInterrupted()) { |
| | | try { |
| | | Thread.sleep(8000); |
| | | if (!websocketRunClient.isOpen()) { |
| | | log.warn("印度股票 websocket 未连接,尝试重连"); |
| | | websocketRunClient.reconnectBlocking(); |
| | | websocketRunClient.setConnectionLostTimeout(0); |
| | | continue; |
| | | } |
| | | websocketRunClient.send("heartbeat".getBytes()); |
| | | } catch (InterruptedException e) { |
| | | Thread.currentThread().interrupt(); |
| | | break; |
| | | } catch (Exception e) { |
| | | websocketRunClient.reconnect(); |
| | | websocketRunClient.setConnectionLostTimeout(0); |
| | | log.warn("印度股票 websocket 保活异常: {}", e.getMessage()); |
| | | try { |
| | | websocketRunClient.reconnectBlocking(); |
| | | websocketRunClient.setConnectionLostTimeout(0); |
| | | } catch (Exception reconnectEx) { |
| | | log.warn("印度股票 websocket 重连失败: {}", reconnectEx.getMessage()); |
| | | } |
| | | } |
| | | } |
| | | }).start(); |
| | | retMap.put(EStockType.IN.getStockKey(), websocketRunClient); |
| | | }, "ws-in-keepalive").start(); |
| | | } catch (Exception e) { |
| | | } |
| | | |
| | | try { |
| | | USWebsocketRunClient usWebsocketRunClient = new USWebsocketRunClient(new URI(StockConstant.US_WS_URL)); |
| | | usWebsocketRunClient.connect(); |
| | | usWebsocketRunClient.setConnectionLostTimeout(0); |
| | | new Thread(() -> { |
| | | while (true) { |
| | | try { |
| | | Thread.sleep(8000); |
| | | usWebsocketRunClient.send("heartbeat".getBytes()); |
| | | } catch (Exception e) { |
| | | usWebsocketRunClient.reconnect(); |
| | | usWebsocketRunClient.setConnectionLostTimeout(0); |
| | | } |
| | | } |
| | | }).start(); |
| | | retMap.put(EStockType.US.getStockKey(), usWebsocketRunClient); |
| | | } catch (Exception e) { |
| | | log.error("印度股票 websocket 初始化失败", e); |
| | | } |
| | | |
| | | return retMap; |