在线人数统计为什么要从心跳开始

直播间在线人数看起来是一个简单数字,但我做过以后会更谨慎地看它。
如果只统计连接数,刷新页面、网络抖动、后台挂起、异常断开都会让数字变得不可靠。业务方看到的是“现在有多少人在看”,系统背后要回答的是“什么样的行为才算仍然在线”。
在线不是连接
用户进入直播间以后,连接可能断,页面可能停留,浏览器可能切后台,网络可能短暂中断。连接状态只是一个信号,不等于真实在线。
我更愿意用心跳来表达观看状态。只要客户端还在按规则上报,系统就认为它仍然活跃;超过一定时间没有心跳,就逐步从在线状态里清理出去。
这样做不是为了追求绝对真实,而是为了让统计规则可解释。
缓存适合保存短期状态
在线状态变化很快,不适合每一次心跳都直接写数据库。缓存更适合保存这类短期状态。
我会把房间、用户或会话维度的状态放进缓存,再通过过期时间和清理逻辑维护在线集合。数据库保留更稳定的记录,比如直播场次、历史峰值、统计快照。
这样可以减少数据库压力,也让实时统计和历史数据有不同边界。
过期清理比进入更重要
在线人数统计里,进入房间很容易处理,真正麻烦的是离开。
用户不一定会正常触发离开事件。关闭浏览器、网络断开、手机锁屏,都可能让系统收不到明确退出信号。如果没有过期清理,在线人数只会越来越虚高。
所以我会把心跳超时和状态清理作为核心逻辑,而不是补充逻辑。统计可信度很大程度取决于系统如何处理“沉默用户”。
运营看的是趋势,不只是瞬时值
在线人数的业务价值,不只是当前数字。
运营更关心一场直播什么时候进入高峰,哪个入口带来更多观看,评论活跃和在线变化是否同步,历史场次之间有没有差异。瞬时在线只是起点,峰值、趋势和时间分布更有价值。
如果底层在线规则不清楚,这些后续统计都会失去可信度。
一个数字背后是一套规则
在线人数统计让我再次确认,很多看起来简单的指标,背后都应该有明确规则。
用户什么时候算进入,什么时候算离开,多久没有心跳算过期,重复打开多个页面如何处理,后台切换是否影响统计,这些问题不回答,数字就只是装饰。
我现在看实时统计,会先问它能不能解释。能解释的数字即使不完美,也能帮助运营判断;不能解释的数字,看起来再实时也容易误导业务。