From 559f070ad00a82ccbff884c0192729f4fee74525 Mon Sep 17 00:00:00 2001 From: whycxzp <glperry@163.com> Date: 星期三, 28 五月 2025 11:39:53 +0800 Subject: [PATCH] 接受websocket并定时检测连接状态及重连 --- src/main/java/com/whyc/webSocket/receiver/WebSocketClientService.java | 56 ++++++++++++++++++ src/main/java/com/whyc/webSocket/receiver/WebSocketClientConfig.java | 22 +++++++ src/main/java/com/whyc/webSocket/receiver/ThirdPartyWebSocketHandler.java | 45 +++++++++++++++ 3 files changed, 123 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/whyc/webSocket/receiver/ThirdPartyWebSocketHandler.java b/src/main/java/com/whyc/webSocket/receiver/ThirdPartyWebSocketHandler.java new file mode 100644 index 0000000..37f3bc3 --- /dev/null +++ b/src/main/java/com/whyc/webSocket/receiver/ThirdPartyWebSocketHandler.java @@ -0,0 +1,45 @@ +package com.whyc.webSocket.receiver; + +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketHttpHeaders; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ThirdPartyWebSocketHandler extends TextWebSocketHandler { + + private static final Logger log = LoggerFactory.getLogger(ThirdPartyWebSocketHandler.class); + private WebSocketSession session; + + @Override + public void afterConnectionEstablished(WebSocketSession session) { + this.session = session; + log.info("WebSocket connection established."); + } + + @Override + public void handleTextMessage(WebSocketSession session, TextMessage message) { + log.info("Received message: {}", message.getPayload()); + // 鍙互鍦ㄨ繖閲屽仛涓氬姟澶勭悊锛屾瘮濡傚彂甯冧簨浠躲�佸瓨鍏ラ槦鍒楃瓑 + String jsonStr = message.getPayload(); + + } + + @Override + public void handleTransportError(WebSocketSession session, Throwable exception) { + log.error("Transport error occurred.", exception); + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) { + log.info("WebSocket connection closed: {}", status); + this.session = null; + } + + public WebSocketSession getSession() { + return session; + } +} + diff --git a/src/main/java/com/whyc/webSocket/receiver/WebSocketClientConfig.java b/src/main/java/com/whyc/webSocket/receiver/WebSocketClientConfig.java new file mode 100644 index 0000000..f30ecae --- /dev/null +++ b/src/main/java/com/whyc/webSocket/receiver/WebSocketClientConfig.java @@ -0,0 +1,22 @@ +package com.whyc.webSocket.receiver; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.client.standard.StandardWebSocketClient; +import org.springframework.web.socket.WebSocketHttpHeaders; +import org.springframework.web.socket.sockjs.client.SockJsClient; +import org.springframework.web.socket.sockjs.client.Transport; +import org.springframework.web.socket.sockjs.client.WebSocketTransport; +import java.util.ArrayList; +import java.util.List; + +@Configuration +public class WebSocketClientConfig { + + @Bean + public ThirdPartyWebSocketHandler thirdPartyWebSocketHandler() { + return new ThirdPartyWebSocketHandler(); + } + +} + diff --git a/src/main/java/com/whyc/webSocket/receiver/WebSocketClientService.java b/src/main/java/com/whyc/webSocket/receiver/WebSocketClientService.java new file mode 100644 index 0000000..76f8a1b --- /dev/null +++ b/src/main/java/com/whyc/webSocket/receiver/WebSocketClientService.java @@ -0,0 +1,56 @@ +package com.whyc.webSocket.receiver; + +import org.springframework.stereotype.Service; +import org.springframework.util.concurrent.ListenableFuture; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.client.standard.StandardWebSocketClient; +import org.springframework.web.socket.WebSocketHttpHeaders; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.annotation.PostConstruct; +import java.net.URI; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +@Service +public class WebSocketClientService { + + /*@Value("${third.party.websocket.uri}") + private String webSocketUri;*/ + + @Autowired + private ThirdPartyWebSocketHandler handler; + + public WebSocketClientService(ThirdPartyWebSocketHandler handler) { + this.handler = handler; + } + + private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + @PostConstruct + public void connect() { + scheduler.scheduleAtFixedRate(() -> { + try { + //鍒涘缓URI瀵硅薄骞跺皢webSocketUri浼犲叆 + //String webSocketUri = "ws://localhost:8919/fg/server"; + String webSocketUri = "ws://localhost:18080/realtime-data"; + URI uri = new URI(webSocketUri); + System.out.println("webSocketUri:"+webSocketUri); + if (handler.getSession() == null || !handler.getSession().isOpen()) { + System.out.println("Connecting to WebSocket server..."); + StandardWebSocketClient client = new StandardWebSocketClient(); + ListenableFuture<WebSocketSession> future = client.doHandshake(handler, new WebSocketHttpHeaders(), uri); + future.addCallback(session -> { + System.out.println("Connected to WebSocket server."); + }, ex -> { + System.err.println("Failed to connect to WebSocket: " + ex.getMessage()); + }); + } + } catch (Exception e) { + System.err.println("Unexpected error during connection attempt: " + e.getMessage()); + } + }, 0, 60, TimeUnit.SECONDS); // 姣�60绉掑皾璇曢噸杩炰竴娆� + } +} + -- Gitblit v1.9.1