2014-02-18 83 views
4

Trello非常準確地顯示了在線/離線/空閒狀態的信息,正如我親眼所見。有幾種跟蹤用戶在線狀態的解決方案,要準確地做到這一點需要付出很大的開銷。還有傳統的問題,不知道用戶是否關閉瀏覽器,斷開連接等,導致顯示脫機/空閒狀態的不準確。對於沒有聊天功能的平臺(我相信這會花費追蹤用戶狀態的開銷並因此使得任務變得簡單),Trello如何實現這一點,儘管沒有太多的開銷?Trello如何準確顯示用戶在線/離線/閒置狀態?

另外Trello能夠檢測到斷開並恢復連接(雖然不太順利)。

Trello的推動和輪詢層使用socket.io ..所以當過用戶登錄它播出的用戶登錄消息中描述here

+3

您可能想簽出NodeUp的[this](http://nodeup.com/fiftyfour)集。 Trello的開發人員進行了訪談,並詳細討論了他們的用戶存在檢測方法。 –

回答

5

每個瀏覽器選項卡都被認爲是與一個用戶相關聯的會話。每個會話的活動級別都是分開跟蹤的,用戶會看到所有會話的活動級別最高(活動最高,然後空閒,然後斷開連接)。

每個選項卡週期性地將其當前狀態發送到服務器 - 如果它有一個可用的WebSocket,則每隔一分鐘發送一次,否則每隔5分鐘發送一次。每次選項卡獲得焦點時,當前狀態都會重置爲活動狀態,或者存在keydown或mousedown事件。如果距離最近的那些事件已經超過5分鐘,它就會閒置。該選項卡在onunload事件中發送斷開連接的狀態,但我們不依賴於此。

每次會話將其狀態發送到服務器時,服務器都會查看該用戶的所有會話,以確定是否指示更改用戶的狀態。如果確實如此,它會向每個觀看用戶所在董事會的每個人廣播新的狀態(這與Trello的其他即時更新所經歷的框架相同,並且在此處解釋過於複雜)。

服務器還會檢查每個會話,看它是否從我們從該會話中聽到的時間太長(如果是WebSocket會話,則爲2分鐘,否則爲10分鐘),如果會話已經移除,則刪除會話表示它已斷開連接)。

有一些優化隱藏在那裏,但這是主要的故事。

+0

雖然不建議按照SO,我想感謝你的答案:) –

+0

很高興幫助! –

1

Trello,然後他們表現出他作爲在線。 一旦他斷開連接,他們會再次在套接字上發送消息,讓他脫機。

許多實時應用程序使用socket.io顯示實時活動。

+0

Trello不再使用'socket.io'(除了支持較舊的客戶端)。 –

+0

@AaronDufour我剛拉起他們的js,它就在那裏:'這個應用程序使用其他第三方javascript組件 分發在適當的許可證下。 請參閱以下內容: ... socket.io.js http://socket.io/ ' – jcollum

+1

@jcollum該代碼仍在那裏,但它的死亡。如果我們的新插座解決方案不能按比例保持,我們希望能夠輕鬆地迴歸到它,但它確實如此。我是Trello的開發者,爲了記錄。 –

相關問題