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秒尝试重连一次
|
}
|
}
|