diff --git a/src/main/java/com/youlai/boot/system/handler/OnlineUserJobHandler.java b/src/main/java/com/youlai/boot/system/handler/OnlineUserJobHandler.java index 1bcc405d..39d1b00f 100644 --- a/src/main/java/com/youlai/boot/system/handler/OnlineUserJobHandler.java +++ b/src/main/java/com/youlai/boot/system/handler/OnlineUserJobHandler.java @@ -22,12 +22,13 @@ public class OnlineUserJobHandler { private final UserOnlineService userOnlineService; private final SimpMessagingTemplate messagingTemplate; - // 每分钟统计一次在线用户数 - @Scheduled(cron = "0 * * * * ?") + // 每3分钟统计一次在线用户数,减少服务器压力 + @Scheduled(cron = "0 */3 * * * ?") public void execute() { log.info("定时任务:统计在线用户数"); - // 推送在线用户人数 - messagingTemplate.convertAndSend("/topic/onlineUserCount", userOnlineService.getOnlineUserCount()); + // 推送在线用户数量到新主题 + int count = userOnlineService.getOnlineUserCount(); + messagingTemplate.convertAndSend("/topic/online-count", count); } } diff --git a/src/main/java/com/youlai/boot/system/service/UserOnlineService.java b/src/main/java/com/youlai/boot/system/service/UserOnlineService.java index 0632a76c..d3b9794a 100644 --- a/src/main/java/com/youlai/boot/system/service/UserOnlineService.java +++ b/src/main/java/com/youlai/boot/system/service/UserOnlineService.java @@ -107,21 +107,30 @@ public class UserOnlineService { */ private void notifyOnlineUsersChange() { if (messagingTemplate == null) { - log.warn("消息模板尚未初始化,无法发送在线用户变更通知"); + log.warn("消息模板尚未初始化,无法发送在线用户数量"); + return; + } + + // 发送简化版数据(仅数量) + sendOnlineUserCount(); + } + + /** + * 发送在线用户数量(简化版,不包含用户详情) + */ + private void sendOnlineUserCount() { + if (messagingTemplate == null) { + log.warn("消息模板尚未初始化,无法发送在线用户数量"); return; } try { - OnlineUsersChangeEvent event = new OnlineUsersChangeEvent(); - event.setType("ONLINE_USERS_CHANGE"); - event.setCount(onlineUsers.size()); - event.setUsers(getOnlineUsers()); - event.setTimestamp(System.currentTimeMillis()); - - String message = objectMapper.writeValueAsString(event); - messagingTemplate.convertAndSend("/topic/online-users", message); - } catch (JsonProcessingException e) { - log.error("Failed to send online users change event", e); + // 直接发送数量,更轻量 + int count = onlineUsers.size(); + messagingTemplate.convertAndSend("/topic/online-count", count); + log.debug("已发送在线用户数量: {}", count); + } catch (Exception e) { + log.error("发送在线用户数量失败", e); } } diff --git a/src/main/java/com/youlai/boot/system/service/impl/WebSocketServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/WebSocketServiceImpl.java index db714dab..addbccf5 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/WebSocketServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/WebSocketServiceImpl.java @@ -114,8 +114,27 @@ public class WebSocketServiceImpl implements WebSocketService { * 供外部手动触发通知使用 */ public void notifyOnlineUsersChange() { - log.info("手动触发在线用户变更通知,当前在线用户数:{}", onlineUsers.size()); - notifyOnlineUsersChangeInternal(); + log.info("手动触发在线用户数量通知,当前在线用户数:{}", onlineUsers.size()); + sendOnlineUserCount(); + } + + /** + * 发送在线用户数量(简化版,不包含用户详情) + */ + private void sendOnlineUserCount() { + if (messagingTemplate == null) { + log.warn("消息模板尚未初始化,无法发送在线用户数量"); + return; + } + + try { + // 直接发送数量,更轻量 + int count = onlineUsers.size(); + messagingTemplate.convertAndSend("/topic/online-count", count); + log.debug("已发送在线用户数量: {}", count); + } catch (Exception e) { + log.error("发送在线用户数量失败", e); + } } /** @@ -124,23 +143,12 @@ public class WebSocketServiceImpl implements WebSocketService { */ private void notifyOnlineUsersChangeInternal() { if (messagingTemplate == null) { - log.warn("消息模板尚未初始化,无法发送在线用户变更通知"); + log.warn("消息模板尚未初始化,无法发送在线用户数量通知"); return; } - try { - OnlineUsersChangeEvent event = new OnlineUsersChangeEvent(); - event.setType("ONLINE_USERS_CHANGE"); - event.setCount(onlineUsers.size()); - event.setUsers(getOnlineUsers()); - event.setTimestamp(System.currentTimeMillis()); - - String message = objectMapper.writeValueAsString(event); - messagingTemplate.convertAndSend("/topic/online-users", message); - log.debug("已发送在线用户变更通知"); - } catch (JsonProcessingException e) { - log.error("发送在线用户变更事件失败", e); - } + // 只发送简化版数据(仅数量) + sendOnlineUserCount(); } /**