在线人数统计

笔者做了一个网站,需要统计在线人数。

在线有两种:

一、如果是后台系统如果登录算在线,退出的时候或者cookie、token失效的时候就算下线

二、如果是网站前台,访问的时候就算在线

今天我们来讲一下第2种情况,网站前台如何统计同时在线人数

1、首先创建一个在线人数管理类

该类主要是管理登录的session信息

package com.ds.blog.admin.manager;

import java.util.HashSet;
import java.util.Set; public class OnlineUserManager { //创建数据类型set来存储session
private static final Set<String> onlineUsers = new HashSet<>(); //添加访问
public static void addUser(String sessionId){
onlineUsers.add(sessionId);
} //删除访问
public static void removeUser(String sessionId){
onlineUsers.remove(sessionId);
} //获取在线人数
public static Set<String> getOnlineUsers(){
return onlineUsers;
} }

2、创建拦截器用于增加访问次数

当用户访问首页或者详情页的时候,拦截器获取sessionid,存入onlineUsers中

package com.ds.blog.admin.interceptor;

import com.ds.blog.admin.manager.OnlineUserManager;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class OnlineInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getRequestURI().contains("/front")){
System.out.println("pre begin");
// 保存访问人数
OnlineUserManager.addUser(request.getSession().getId());
System.out.println("pre end");
}
return true;
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if (request.getRequestURI().contains("/front")){
System.out.println("postHandle begin");
// 在处理完请求后调用,可以对ModelAndView进行操作
if (modelAndView != null) {
modelAndView.addObject("onlineUsers", OnlineUserManager.getOnlineUsers().size());
}
System.out.println("postHandle end");
}
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
} }

3、注册第2步的拦截器

package com.ds.core.config;

import com.ds.blog.admin.interceptor.OnlineInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration
public class MyMvcConfig implements WebMvcConfigurer { @Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new OnlineInterceptor());
}
}

前三步做完以后,就可以实现在线人数了。

4、网页实现

<p th:text="'当前在线人数: ' + ${onlineUsers}"></p>

效果如下:

但是有一个问题,如果用户关闭访问的页面,同时在线人数不会下降,原因是因为前端认为关闭页面才算作退出在线人数。所以当页面关闭的时候,触发onlineUserManger的removeUser方法,就需要第5和第6步的实现

5、前端controller添加关闭页面时调用的controller

页面关闭时,会调用removeSession方法

/**
* @return
*/
@BookLog(title = "关闭页面时减少在线人数",businessType = BusinessType.DELETE)
@ApiOperation(value = "获取文章内容")
@PostMapping(value = "blog/updateOnlineUsers")
@ResponseBody
public Result removeSession(HttpServletRequest request){
try {
OnlineUserManager.removeUser(request.getSession().getId());
} catch (Exception exception) {
exception.printStackTrace();
}
return Result.success("减少成功");
}

6、页面关闭时,js触发controller

window.onbeforeunload = function() {
$.ajax({
url: 'blog/updateOnlineUsers',
method: 'POST',
success: function(response) {
console.log('关闭成功')
}
});
}

总体功能完成,我们来看下效果

ie浏览器登录,在线人数为1

谷歌浏览器登录,在线人数为2

关闭ie浏览器,刷新谷歌浏览器当前在线人数降为1

springboot在线人数统计的更多相关文章

  1. 用HttpSessionListener与HttpSessionBindingListener实现在线人数统计

    在线人数统计方面的实现,最初我的想法是,管理session,如果session销毁了就减少,如果登陆用户了就新增一个,但是如果是用户非法退出,如:未注销,关闭浏览器等,这个用户的session是管理不 ...

  2. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-[过滤器+Cache] 系列目录 上次的探讨没有任何结果,我浏览了大量的文章 ...

  3. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(39)-在线人数统计探讨

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(39)-在线人数统计探讨 系列目录 基于web的网站在线统计一直处于不是很精准的状态!基本上没有一种方法可 ...

  4. HttpsessionListener 实现在线人数统计

    最近在学servlet jsp,用的林信良先生的 jsp&servlet 这本书,在第五章有道在线人数统计的课后题完成,做一次记录. 实际效果: 一:用户类: package cc.openh ...

  5. 在线人数统计session管理

    下午比较闲(其实今天都很闲),想了一下在线人数统计方面的实现,上网找了下这方面的知识,最初我的想法是,管理session,如果session销毁了就减少,如果登陆用户了就新增一个,但是如果是用户非法退 ...

  6. [转]用HttpSessionListener与HttpSessionBindingListener实现在线人数统计

    原文链接:http://www.cnblogs.com/shencheng/archive/2011/01/07/1930227.html 下午比较闲(其实今天都很闲),想了一下在线人数统计方面的实现 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(39)-在线人数统计探讨

    系列目录 基于web的网站在线统计一直处于不是很精准的状态!基本上没有一种方法可以确实的统计在线用户! Discuz!NT 在线用户功能算是做得比较好的!参考资料 他的原理大致是根据用户的操作间隔来确 ...

  8. Struts2实现简单的在线人数统计

    用Strust2框架的知识简单实现一个统计在线人数的问题. 1 搭建开发环境:(配置文件,jar包等问题) 2 index.jsp <%@ page language="java&qu ...

  9. servlet监听器实现在线人数统计

    一.准备知识 servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层. filter:fi ...

  10. asp.net 在线人数统计\页面访问量

    1.新建网站,添加几个窗体.webForm1.aspx ,ViewStateForm.aspx 2.在网站的根目录下添加全局应用程序类“Global.aspx” .(重要) 3.在“Global.as ...

随机推荐

  1. Unity的IPreprocessComputeShaders:深入解析与实用案例

    Unity IPreprocessComputeShaders Unity IPreprocessComputeShaders是Unity引擎中的一个非常有用的功能,它可以让开发者编译Compute ...

  2. python爬虫抓取图片

    一.什么是爬虫 什么是爬虫?爬虫是蜘蛛么?是八爪鱼么?nonono. 爬虫是指请求网站并获取数据的自动化程序,又称网页蜘蛛或网络机器,最常用领域是搜索引擎,最常用的工具是八爪鱼. 它的基本流程分为以下 ...

  3. WPF如何构建MVVM+模块化的桌面应用

    为何模块化 模块化是一种分治思想,不仅可以分离复杂的业务逻辑,还可以进行不同任务的分工.模块与模块之间相互独立,从而构建一种松耦合的应用程序,便于开发和维护. 开发技术 .Net 6 + WPF + ...

  4. papricice

    2023-07-14 题目 题目传送门 题目大意 给定一个 \(n\) 个点的树,这 \(n\) 个点编号为 \(1\) 到 \(n\). 现在要选择断掉两条边,会形成三个连通块,假设这三个连通块内的 ...

  5. 谈一谈电商api的未来

    随着互联网的飞速发展,电商行业已经成为了现代消费的主流模式.在电商平台上,商品的交易.物流.支付等环节都需要使用API(Application Programming Interface)接口来实现信 ...

  6. ArcMap中矢量数据修改标注Label的方法

      本文介绍在ArcMap软件中,修改图层标签(Label)所显示字段与具体显示内容的方法.   在之前的文章中,我们看到了ArcMap中修改图层标签的重要性:可是,如何自定义图层的标签内容呢?    ...

  7. Github的一个奇技淫巧

    背景 前段时间给 VictoriaLogs 提交了一个 PR: https://github.com/VictoriaMetrics/VictoriaMetrics/pull/4934 本来一切都很顺 ...

  8. angular + express 实现websocket通信

    最近需要实现一个功能,后端通过TCP协议连接雷达硬件的控制器,前端通过websocket连接后端,当控制器触发消息的时候,把信息通知给所以前端: 第一个思路是单独写一个后端服务用来实现websocke ...

  9. 算法打卡|Day5 哈希表part01

    哈希表 part01 今日任务 ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 目录 哈希表 part01 链表理论基础 Pr ...

  10. Aho-Corasick 算法 AC自动机实现

    敏感词过滤在社区发帖.网站检索.短信发送等场景下是很常见的需求,尤其是在高并发场景下如何实现敏感词过滤,都对过滤算法提出了更高的性能要求,Ahocorasick算法能够实现毫秒级的万字过滤匹配,能够很 ...