wip: 优化临时提交

This commit is contained in:
Ray.Hao
2025-04-25 17:39:11 +08:00
parent 5aff74d36f
commit 4dfa6ae1d8
3 changed files with 49 additions and 31 deletions

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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();
}
/**