2012-06-11 33 views
-1

我正在为我的网站进行聊天。为此,我需要找出有多少注册用户在线。我计算会话的数量并将它们存储在一个表中。当他们注销时,他们的名字将从该表中删除。现在,如果他们不单击注销并直接关闭其选项卡,则不会使其脱机。他们的名字仍然存在于表格中。所以要删除它们,我发现了一个非常复杂的在线算法。它每五分钟清空一次表格,然后再添加在线人员的姓名。但问题是,这种情况发生时,聊天会中断。所以我需要一个解决这个问题的方法如何找到在线用户

+0

使用http://xmpp.org/ – Katti

+1

为了搞清楚这个问题多一点,你需要描述你的数据库表结构以及它们如何相互关联。 理想情况下,你应该有3张桌子。一个用于用户详细信息,一个用于存储聊天文本,另一个用于存储活动用户列表。 您还需要解释“聊天被中断”的含义 - 您的意思是用户丢失了聊天记录,或者说您的系统清空了表(这意味着某种锁定),他们无法聊天。 –

回答

4

为“last active”添加一列。每次用户执行一些操作(例如,可能包括浏览器通过AJAX轮询更多邮件),您将该列更新为NOW()。然后你寻找活跃用户查询可以是这样的:

SELECT user.name FROM user 
    WHERE DATE_ADD(user.last_active, INTERVAL 5 MINUTE) >= NOW(); 

删除旧记录从上表是好的,但可能是一个可选的增强(视现场负荷)。

0

我觉得有2个解决方案。

1.)保存时间戳并制作一个cronjob。例如,每分钟或每分钟2分钟检查一次条目,并删除大于5分钟的条目。

2.)第二种方式使功能与第1点相同,但在每个页面调用中运行该功能。但这并不是真正有效的,并且会造成很多负担。