后端怎么记录App最后在线时间最合理

一些移动端统计平台可以统计日活月活,但是我想自己的系统记录一份在线时间,比如查看到具体某个用户最后在线时间,或者最后通信时间,因为Token是长期有效的,不可能让用户每天登录一次,所以依靠登录接口来记录最后在线时间有些离谱,目前想到的办法

1、APP每天第一次启动上报一次当前账户,活跃记录,APP自己维持这个状态,当日不再上报。统计精度/天,资源消耗/非常低

2、API每次请求都使用中间件拦截,更新用户表最后在线时间字段(最后一次请求API时间)。统计精度/很高,资源消耗/非常高

2.1、API每次请求都使用中间件拦截,如果数据库记录和当前时间差距超过30分钟,更新用户表最后在线时间字段。统计精度/半小时,资源消耗/低

2.2、2.1的基础上改成存redis,不会丢失30分钟的精度。

3、长连接实时检测在线状态,统计精度/毫秒级,资源消耗/很高。

有没有其他什么更好的方案,能做到记录最后在线时间精度最高,同时资源开销、开发复杂度更低

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 21

2.2 就可以了吧,使用 redis 的话应该可以达到 2.0 的实时的效果,

不推荐 1,绑定了客户端,不灵活

3 的精度是业务需要的吗


因为 Token 是长期有效的,不可能让用户每天登录一次,所以依靠登录接口来记录最后在线时间有些离谱 这句话不对吧,接口起码会有个校验 token 的处理吧,token 校验感觉和登录接口差不多,只是 token 有效期内用户无感知吧

3周前

因为 Token 是长期有效的,不可能让用户每天登录一次,所以依靠登录接口来记录最后在线时间有些离谱....

感觉这个有点离谱. token 怎么是长期有效的呢, 正常每隔一段时间不应该静默刷新token嘛? 你这样后台如何使客户端的登陆失效啊..

3周前

因为 Token 是长期有效的,不可能让用户每天登录一次,所以依靠登录接口来记录最后在线时间有些离谱

感觉这句话有点离谱啊, token 怎么是长期有效的. 它不应该每隔一段时间静默刷新嘛? 如果不这样, 后台怎么样主动使客户端登陆失效啊?

3周前

为啥评论不了. :cry:

3周前 评论
zhaojjiang 3周前
cmfac (作者) 3周前
zhaojjiang 3周前
cmfac (作者) 3周前
zhaojjiang 3周前
cmfac (作者) 3周前
cmfac (作者) 3周前
cmfac (作者) 3周前
看上隔壁小花了啦 3周前
MArtian 3周前
你看我吊吗啊

我觉得还是从需求层面出发,要求不高的话 用性能损耗最小的方案,如果像qq在线时长那样的场景,我估计是要精确到分钟的吧。

3周前 评论
cmfac 3周前
NealCaffrey

可以由客户端定时发送心跳数据到后台,具体的间隔时长根据你们业务需求进行自定义。

3周前

上 Websocket 发心跳包不就完了吗?用得着搞这么复杂?用 Redis 记录在线时间???

onConnect 的时候写入一个缓存,以用户 id 为键,当前时间戳为值

onClose 的时候触发事件,查找上面的 id 键值,获取当前时间戳相减。

3周前

方案 3,之前遇到过,安卓 app 维持长连接活跃,实际操作难度较大,webscoket 切到后台就断。。。

3周前 评论
你看我吊吗啊 3周前

如果系统里面没有用到长链接啥的 直接中间件更新用户活跃时间到redis 每天固定时间录入数据库就行 一般的系统没必要整一些花里胡哨的 :joy:

3周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!