后台监听webdocket 推送消息 并实现心跳监测、消息订阅
package io.websocket.websocketClint;
import javax.websocket.*;
import java.io.IOException;
import java.net.URI;
import java.util.Timer;
import java.util.TimerTask;
@ClientEndpoint
public class WebSocketClient {
private Session session;
private Timer heartbeatTimer;
private static String url = "ws://localhost:25015/webSocket/timing/page/getExceptionDataSampleStatic";
private static WebSocketContainer container = ContainerProvider.getWebSocketContainer();
@OnOpen
public void onOpen(Session session) {
this.session = session;
System.out.println("WebSocket连接已打开");
subscribe();
startHeartbeat();
}
@OnMessage
public void onMessage(String message) {
System.out.println("收到消息:" + message);
}
@OnClose
public void onClose() {
System.out.println("WebSocket连接已关闭");
}
public void subscribe() {
String subscriptionMessage = "订阅消息";
try {
session.getBasicRemote().sendText(subscriptionMessage);
System.out.println("发送订阅消息:" + subscriptionMessage);
} catch (Exception e) {
e.printStackTrace();
}
}
public void startHeartbeat() {
heartbeatTimer = new Timer();
heartbeatTimer.schedule(new TimerTask() {
@Override
public void run() {
sendHeartbeat();
}
}, 0, 5000);
}
public void sendHeartbeat() {
String heartbeatMessage = "心跳消息";
try {
session.getBasicRemote().sendText(heartbeatMessage);
System.out.println("发送心跳消息:" + heartbeatMessage);
} catch (Exception e) {
try {
session = container.connectToServer(WebSocketClient.class, URI.create(url));
} catch (DeploymentException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
e.printStackTrace();
}
}
public void stopHeartbeat() {
if (heartbeatTimer != null) {
heartbeatTimer.cancel();
}
}
public static void main(String[] args) {
try {
container.connectToServer(WebSocketClient.class, URI.create(url));
} catch (Exception e) {
e.printStackTrace();
}
}
}