方案: 前端做个轮询(60s) 考虑到可能为未登录情况下,user_id
后端
数据存储(redis)
https://chat.deepseek.com/a/chat/s/07c6e9ad-001a-4036-89d2-3d3390071ed8
const userId = "user123"; // 当前用户ID
const currentTimestamp = Date.now(); // 当前时间戳
// 使用Redis命令:ZADD online_users <timestamp> <user_id>
await redis.zadd('online_users', currentTimestamp, userId);
取消过期时间 + 定期清理
// 取消设置过期时间
// 改为使用定时任务清理离线用户
async function cleanupInactiveUsers() {
const cutoff = Date.now() - 120000; // 2分钟不活跃视为离线
await redis.zremrangebyscore('online_users', 0, cutoff);
}
// 每小时执行一次清理
setInterval(cleanupInactiveUsers, 3600000);