实现定时退出推送:
@ServerEndpoint("/login")
@Component
public class LoginWebSocket {
private Session session;
private long loginTime;
private int loginDurationMinutes = 10; // 默认登录时长为5分钟
private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
@OnOpen
public void onOpen(Session session) {
this.session = session;
loginTime = System.currentTimeMillis();
// Schedule a task to send logout message 5 minutes before login duration ends
scheduler.schedule(this::sendLogoutMessage, loginDurationMinutes - 5, TimeUnit.SECONDS);
}
@OnClose
public void onClose() {
scheduler.shutdown();
}
@OnMessage
public void onMessage(String message) {
// You can implement your login logic here
// For example, you can extract login duration from the message
// and update the loginDurationMinutes accordingly.
}
private void sendLogoutMessage() {
try {
if (session.isOpen()) {
session.getBasicRemote().sendText("Your session is about to expire. You will be logged out in 5 minutes.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
参考:
理论:万字长文,一篇吃透WebSocket:概念、原理、易错常识、动手实践-腾讯云开发者社区-腾讯云 (tencent.com)
代码:Spring Boot 集成 WebSocket(原生注解与Spring封装)_springboot集成websocket_人人都在发奋的博客-CSDN博客
Spring 实现webSockethttps://www.cnblogs.com/guoapeng/p/17020317.html