2010-04-18 25 views
4

我們的目標是建立關於用戶在線時間段的時間表。 (這其實並不重要,我們在說些什麼用戶約和他是在網上)要獲取有關onliners信息,我們可以調用API方法,someservice.com/api/?call= whoIsOnline有人在線時捕獲時間間隔?你會如何阻止這個功能?

whoIsOnline方法會給我們一個當前在線用戶的列表。但有沒有API方法來獲取有關誰不在線的信息。因此,我們應該使用我們從whoIsOnline得到的信息來構建我們的時間表。當然會有測量誤差(我們無法實時跟蹤信息)。假設我們會每2分鐘致電whoIsOnline方法(是的,我們將每2分鐘通過cron運行我們的腳本)。

例如,調用whoIsOnline在08:00將返回

Peter_id 
Michal_id 
Andy_id 

調用whoIsOnline在08:02將返回

Michael_id 
Andy_id 
George_id 

正如你可以看到,彼得已經下線,但我們有新的在線人 - 喬治。

可用的工具是Db(MySQL)/文本文件/鍵值存儲(Redis/memcache);隨意選擇他們中的任何一個(甚至全部)。

所以,我們要得到這樣

George_id was online... 
12 May: 08:02-08:30, 12:40-12:46, 20:14-22:36 
11 May: 09:10-12:30, 21:45-23:00 
10 May: was not online 

現在信息的問題...

  1. 你如何存儲的信息來實現這樣的時間表?
  2. 如何查詢/計算用戶在線時間段的信息?

更多信息..

  1. 不能更新有關脫機用戶,只有誰是「目前」在線用戶的信息。
  2. 解決方案應該靈活:時間線信息可以表示爲與任何時區有關。
  3. 我們應該只保留最近7天的信息。
  4. 每個在線看到的用戶都會在我們的數據庫中自動獲取他自己的標識符。

UFF ..這是真的很難,我把它寫,因爲我的英語很糟糕,但我希望我的問題很清楚你。

謝謝。

+2

你的英語並不差,尤其是與其他一些用戶相比。 – SLaks 2010-04-18 14:06:33

+0

'memcache'是一個緩存機制,而不是一個存儲機制。沒有彈性保證,假設您可以在緩存過程終止時返回數據。 – 2010-04-19 07:56:25

+0

是的,我知道 - 這是我的錯誤。 – Kirzilla 2010-04-22 13:08:55

回答

1

有兩種截然不同的測量「在線」狀態的方法:

  1. 作一個假設,當有人點擊一個網頁,他們是在網上爲例如,5分鐘後一些概念上的間隔。因此,如果他們在4:03,4:05和4:09點擊一個頁面,他們的在線時間間隔爲4:03至4:09-4:14(取決於您針對最終點擊所做的算法/假設);或

  2. 使用「心跳」Javascript和/或Flash進程跟蹤頁面打開的頻率。 (1)更常見。(1)

(1)更爲常見。 (2)經常讓人們對隱私問題持懷疑態度。另一種觀察方式是(1)是被動監控,而(2)是主動監控。 (1)有很多變體。間隔可能不固定。它可能會有所不同,具體取決於用戶所在的頁面。這可以從假設或統計抽樣或甚至僅僅是概率模型構建。在最簡單的情況下,「誰在線?」只是在最近5分鐘內點擊了某些內容的用戶列表,這很容易理解(因爲您正在記錄每個頁面視圖)。

0

我會做這樣的事情(僞)

UPDATE session_log SET last_online = NOW() WHERE user = ... AND last_online = '10 minutes ago' 
IF NOT UPDATED: 
    INSERT INTO session_log (last_online, user) VALUES(NOW(), user) 

應該有一個created at(或類似)柱太ofcourse,但這樣你可以輕鬆地跟蹤會話。

相關問題