前后端分离项目门户网站在线时长统计逻辑

在项目中遇到前后端分离的门户项目需要统计各用户在线时长,包括门户跳转到的其他业务系统,门户与其他业务系统共用一套数据库

方案1:
通过用户在线表,每次登录时会生成一条用户在线记录(该门户系统不存在登录页面,一打开浏览器即自动进入),当用户安全退出时该条记录会删除,而当直接关闭浏览器时,该条记录不变,当用户通过门户跳转其他系统时,会重新生成一条记录;通过一分钟一次的定时任务将该表数据同步至新表中,当该id在新表中存在时,更新表中的最后活跃时间;当该id不存在时,插入该条记录;另外在第二天凌晨新增一个定时任务统计前一天在线时长,获取该用户在前一天的所有新表中的在线记录,通过每一条记录的最后活跃时间减去创建时间累计获得
不足:前后端分离项目会定时更新用户表的最后活跃时间来保证用户登录不会超时,因而会导致即使客户没有操作,依旧统计进了在线时长;

方案2
通过页面加定时器统计用户在页面的操作,当超过规定时间没有操作时,插入一条安全退出记录,最后通过登录退出记录表来统计在线时长
不足:
1 插入一条退出记录后,当用户重新操作时应该插入一条登录成功日志,相当于登录及退出操作同时有多个页面在操作,可能会导致数据混乱
2.当用户直接关闭浏览器时,退出的操作无法保证能插入到数据库中,这与浏览器的特性有关,无解

方案3
新增一个日志模块,将写日志的方法封装为一个service,在客户进行页面操作时将该操作记录在业务日志中,通过判断两次操作的间隔来计算是否要将该时间段统计进在线时长中
不足:所有的功能全需要插入业务日志表,造成数据量可能过大,日志表的设计及之后的查询功能需要优化;所有的操作全都需要集成日志模块,调用插入日志数据的service,工作量不小,需要各系统配合。但统计结果相对准确。

你可能感兴趣的:(java)