mysql+tomcat+SSH+jsp 如何统计当前在线用户呢?如果只统计会员怎么做,如果要统计游客怎么做?请大侠给个思路
首先,一般需要在服务器端维持一个用户的在线状态标记用以标识用户是否在线。
其次,对于会员和游客,简单的说就是登录用户和非登录用户。登录用户很好处理,根据用户的登录和退出动作统计更新用户的在线状态。非登录用户一般采用独立IP来区分。对于一些代理或者共用公网IP的多个用户,添加机器标识用以进一步区分。
最后,能够区分用户是否在线,能够区分登录用户和非登录用户,统计就是简单问题了。
我也正在进行这方面的探索,我的实践是这样的,仅供参考:
目前我只有这样两个方法,期待其他好答案。
8 回答6.5k 阅读
4 回答683 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答959 阅读✓ 已解决
由于HTTP属于无状态短链接,真实在线是不可知的,因此业内一般的做法都是计算一个大概值,例如“最近10分钟内刷新过页面的人数”即认为是同时在线人数。(当然另外一种是 @cubianyu 所说的长连接或伪长连接,可以做到更精准但在一般web情况下极大的增加了服务器消耗,除非你本身就是要做web聊天那种频繁交互的网站否则还是算了)
一般的做法为:
登录用户用户名做key,非登录用户IP做key。任何页面被刷新一次之后就往数据库(或缓存或内存)中写入一条记录:
另外做一个定时器例如每隔1分钟清理一下表中lastRefreshTime到现在超过10分钟的人数。(定时器可以用Quartz做也可以简单点自己搞个static变量来做)
最后,在线人数就是这个表的count。
P.S. “10分钟”这个间隔可以自己来调整,时间越长在线人数看起来就越多,越短就看起来越少,一般的BBS时长会在20-60分钟之间