首页 > 编程语言 >【Java】用户在线人数统计的简单实现

【Java】用户在线人数统计的简单实现

时间:2023-10-13 09:36:16浏览次数:53  
标签:10 令牌 Java 在线 用户 接口 return token import

一、需求效果:

就是进入首页时能查看在线人数,没有特定要求,那我就不刷这个接口了

就进入首页加载一次

 

二、实现思路:

思路参考博客:

https://blog.csdn.net/GitLuckyd/article/details/124488063

如果是以前那种JSP的单体项目,可以用Servlet的监听器API来做

但是不管是Servlet还是现在微服务也好,没办法准确知道用户是否离开了应用

 

然后上面的思路是:

- 后台定时清空令牌容器

- 前端定时存入令牌,打一个时间差

- 只要存活的用户,不管是操作还是干嘛,只要没有关闭应用,就会持续存入令牌

 

三、代码实现:

后台接口直接做一个令牌容器

两个接口,一个查询容器令牌个数,一个存入令牌

package cn.ymcd.portal.user.controller;

import cn.ymcd.comm.log.LogFactory;
import cn.ymcd.comm.log.YmcdLogger;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashSet;
import java.util.Set;

/**
 * @author OnCloud9
 * @version 1.0
 * @project portal-app
 * @date 2023年10月10日 14:46
 */
@RestController
@RequestMapping("${api.path}/online")
public class UserOnlineCountController {
    private YmcdLogger logger = LogFactory.getLogger(this.getClass());
    private static final Set<String> TOKEN_SETS = new HashSet<>();

    /**
     * @author OnCloud9
     * @date 2023/10/8 11:34
     * @description 获取在线人员数量
     * @params []
     * @return java.lang.Integer
     */
    @GetMapping("/counts")
    public Integer getOnlineCounts() {
        return TOKEN_SETS.size();
    }

    /**
     * @author OnCloud9
     * @date 2023/10/10 14:51
     * @description 心跳接口, 前端调用接口定时添加令牌 3分钟一次
     * @params [token]
     * @return void
     */
    @GetMapping("/heart-beat")
    public void heartBeatTokenSet(@RequestParam("token") String token) {
        TOKEN_SETS.add(token);
    }

    /**
     * @author OnCloud9
     * @date 2023/10/10 14:55
     * @description 清除令牌 每30分钟执行一次
     * @params []
     * @return void
     */
    @Scheduled(cron = "0 0/30 * * * ?")
    public void scheduledTasks() {
        logger.info("cn.ymcd.portal.user.controller.UserOnlineCountController 开始清理用户令牌... 当前令牌信息:" + TOKEN_SETS.toString());
        TOKEN_SETS.clear();
    }
}

  

前端API接口:

/**
 * 获取用户在线人数
 * @returns {*}
 */
export function getOnlineCounts() {
  return requestPortal({
    url: 'online/counts',
    method: 'get'
  })
}

/**
 * 用户在线人数心跳接口
 * @returns {*}
 */
export function onlineHeartBeats(token) {
  return requestPortal({
    url: 'online/heart-beat',
    method: 'get',
    params: { token }
  })
}

 

首页的定时任务:

import { mapGetters } from 'vuex'
import { getOnlineCounts, onlineHeartBeats } from '../api/user'
computed: {
  ... mapGetters([
    'name',
    'roles',
    'dept',
    'userId',
    'token'
  ])
},
created() {
  getOnlineCounts().then(res => (this.onlineCounts = res.data))

  /* 每三分钟心跳一次,刷新这个页面加载一次 */
  onlineHeartBeats(this.token)
  this.heartbeatInterval = setInterval(() => (onlineHeartBeats(this.token)), 1000 * 60 * 3)
},
beforeDestroy() {
  clearInterval(this.heartbeatInterval)
}

  

 

标签:10,令牌,Java,在线,用户,接口,return,token,import
From: https://www.cnblogs.com/mindzone/p/17755021.html

相关文章

  • Java也能做OCR!SpringBoot 整合 Tess4J 实现图片文字识别
    前言今天给大家分享一个SpringBoot整合Tess4j库实现图片文字识别的小案例,希望xdm喜欢。文末有案例代码的Git地址,可以自己下载了去玩玩儿或继续扩展也行。话不多说,开整吧。什么是Tess4j库先简单给没听过的xdm解释下,这里要分清楚Tesseract和Tess4j的区别。Tesseract是一个......
  • 「Java开发指南」如何在MyEclipse中使用JPA和Spring管理事务?(一)
    本教程中介绍一些基于JPA/spring的特性,重点介绍JPA-Spring集成以及如何利用这些功能。您将学习如何:为JPA和Spring设置一个项目逆向工程数据库表来生成实体实现创建、检索、编辑和删除功能启用容器管理的事务MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981......
  • Win10设置本地用户限制使用指定程序与文件资源
    前言针对特定win10用户登录解决只能访问指定程序和文件,从而保证个人隐私的解决方案。一、新建本地用户账户1、在Windows10系统右键点击左下角的“开始按钮”–》设置--》账户--》将其他人添加到这台电脑。   2.在左侧用户上右键–》点“新用户”–》完成创建操作。......
  • 打造炫酷效果:用Java优雅地制作Excel迷你图
    摘要:本文由葡萄城技术团队原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言迷你图是一种简洁而有效的数据可视化方式,常用于展示趋势和变化。它通常由一组小型的线条或柱状图组成,用于表示数据的变化情况。迷你图的主要......
  • 【开源】给ChatGLM写个,Java对接的SDK
    作者:小傅哥-百度搜小傅哥bugstack博客:bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!......
  • 在java中将InputStream对象转换为File对象(不生成本地文件)
    importorg.apache.commons.io.IOUtils;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;publicclassStreamUtil{staticfinalStringPREFIX="stream2file";//前缀字符串定义文件名;必须至少三个字符......
  • 2023-10-12 javac : 无法将“javac”项识别为 cmdlet、函数、脚本文件或可运行程序的
    找到你的jdk安装路径/bin,复制并扔到环境变量中去即可,如:   ......
  • 用Java实现计算器软件设计
    Java编写个人计算器软件一、所需要实现的功能1.该计算器需要实现加、减、乘、除、开平方功能。2.需要有一个运行的UI界面,可以和电脑自带的计算器相比较。该界面要有一个文本输入框,用来显示输入的表达式;若干个按钮,用来用来显示数字以及操作符;当点击按钮时,按钮上面对应的文本......
  • 2023-10-12 java学习笔记
    1.安装java环境,点击链接前往下载......
  • java的卸载和安装
    java的卸载删除安装目录删除JAVA_HOME删除path下关于java的目录检测是否删除:java-versionJava的安装百度搜索JDK8,找到下载地址同意协议下载电脑安装版本双击安装记住安装的路径配置环境变量我的电脑——>右击——>属性——>高级系统设置环境变量......