首页 新闻 会员 周边

如何统计在线人数,是求出用户具体信息(像校内网下面那个条似的)

0
悬赏园豆:10 [已关闭问题]

统计当前在线用户,并显示出来,请问你下大家用的最好的办法

小孤狸的主页 小孤狸 | 初学一级 | 园豆:7
提问于:2008-10-07 10:36
< >
分享
其他回答(4)
0

我想到的一种解决方法是客户端每隔一定的时间回发一个状态标识,服务器统计人数时,只统计有状态标识的。这种方法的关键点是选择一个合适的时间间隔。

张荣华 | 园豆:2020 (老鸟四级) | 2008-10-07 11:24
0

建个在线用户表,表中有个字段是最后操作时间
如果一个用户登录,录入在线用户表,记录操作时间和登录时间,以及相关具体信息,同时判断在线用户表中所有人员的操作时间和当期时间间隔,如果超过30分钟,视为离线,并从在线用户表中删除此用户,

在用户操作时,记录关键的操作,[如写入数据库的操作,浏览重要信息的操作],将关键操作记录在线用户表,并同时检查在线用户的超时情况

zjy | 园豆:3194 (老鸟四级) | 2008-10-07 11:52
0

我也关注这个问题,不知最后的操作时间如何去得到呢?用户一在网站上活动就能更新他的操作时间,不知这个是如何去办到呢

石牌村夫 | 园豆:370 (菜鸟二级) | 2008-10-07 14:44
1

这个问题我想过好几种方法,不过都觉得不大妥

一:在应用程序的某个区域当中,比如一个静态区域,或者Application里,保存一个列表,表示当前哪些用户在线,当用户登录的时候,就在这个列表里加入这个用户,当用户退出,或者自然退出(比如Application_SessionEnd)时,从列表移除它,页面访问时查这个列表,从中筛出当前用户的好友。

二:数据库里用表户做个是否在线的标识——这是最早被我推翻的一种,因为这个标识不应当是“用户”实体的一个属性,这有违数据库设计的原则。

三:和1类似,只不过不在应用程序的内存区域里,在数据库里创建一个表,记录在线用户。和1相比优点在于应用程序重启后数据还在,虽然可能会有效性受到质疑,但起码数据还在,有效性可以通过编程来判断。1的优点在于数据在内存中,避免了每次读取时访问数据库的开销。

再说说用户是否活跃的判断方法吧,我想的是用类似于Cookie过期时间的判断方法,用户发生操作的时候(因为页面访问是要授权的,所以用户访问页面肯定是在有当前会话用户资料的基础上进行的,不会产生多大额外开销),更新其最后活跃时间。然后通过别的方法,每隔一段时间轮询数据库,把最后活跃时间与当前时间的差超过阈值的剔除。不过这个“轮询”好像不是很好实现,因为网页是被动触发的,所以也比较头疼。

JimLiu | 园豆:300 (菜鸟二级) | 2008-10-07 16:16

能给点具体的代码吗???

支持(0) 反对(0) zy121 | 园豆:107 (初学一级) | 2011-11-22 20:47
0

public class user{

public string userName;

public DateTime userUpdate;

}

可以用statice Directionary<string,user>放在服务器端

客户端定时(每隔5分钟)更新 userUpdate这个字段

服务端写一个程序,定期(每隔8分钟)检查Directionary每个用户userUpdate这个字段,如果当前时间-userUpdate>5分钟,则说明用户离线或者非法退出,踢出用户。

poplau | 园豆:59 (初学一级) | 2008-10-08 10:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册