2012-06-11 64 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點相同,但在每個頁面調用中運行該功能。但這並不是真正有效的,並且會造成很多負擔。