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<String, WebSocketClient> websocketRunClientMap() {
|
|
Map<String, WebSocketClient> retMap = new HashMap<>(2);
|
try {
|
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 (!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) {
|
log.warn("印度股票 websocket 保活异常: {}", e.getMessage());
|
try {
|
websocketRunClient.reconnectBlocking();
|
websocketRunClient.setConnectionLostTimeout(0);
|
} catch (Exception reconnectEx) {
|
log.warn("印度股票 websocket 重连失败: {}", reconnectEx.getMessage());
|
}
|
}
|
}
|
}, "ws-in-keepalive").start();
|
} catch (Exception e) {
|
log.error("印度股票 websocket 初始化失败", e);
|
}
|
|
return retMap;
|
}
|
|
|
}
|