2015-01-09 53 views
1

我有多個heroku dynos和一個聊天應用程序。當用戶登錄時,他們的狀態在MongoDB中設置爲「聯機」。但是,如果服務器崩潰,其狀態仍將設置爲聯機。如何在服務器崩潰時將用戶狀態更新爲「脫機」?如何在服務器崩潰時跟蹤用戶的「在線」狀態?

如果我只有一個測功機,這將很容易。我只是更新每個用戶在服務器啓動時「離線」。不幸的是,這對多臺服務器來說是不可能的。

+0

你跟蹤他們在你的網站上的活動嗎? – gmaniac

+0

@gmaniac你是什麼意思?當他們登錄時,我將狀態設置爲「在線」,並且在調用套接字「disconnect」事件時,我將其狀態設置爲「offline」 –

+0

,例如,如果要存儲它們的消息,則可以運行cron或在後臺運行的東西檢查最後的活動,如果它不在'x'時間,它們的狀態會變爲非活動狀態或脫機狀態。 – gmaniac

回答

2

根據我們的聊天和評論。

最好的選擇是去檢查最後的活動。因此,看到最後一條消息的發送時間以及最後一條消息是否發生在5分鐘內,如果沒有任何活動將它們標記爲脫機,則表示它們處於聯機狀態。

就像我在評論中提到的,如果你不是存儲在郵件文檔date_created你不會有任何改變,因爲_id商店返回此Date對象的時間戳

ObjectId("507f191e810c19729de860ea").getTimestamp() 

ISODate("2012-10-17T20:46:22Z") 

answer是另一種選擇(如果你想保持他們在線,即使他們不發送消息):

如果你想知道他們仍然活躍,即使他們不是每頁跳轉一次,包括一點javascript來每隔60秒ping你的服務器,讓你知道他們還活着。它的工作方式與我原先的建議相同,但它會更新您的記錄,而不會要求他們每五分鐘至少瘋狂地瀏覽您的網站一次。

var stillAlive = setInterval(function() { 
    /* XHR back to server 
     Example uses jQuery */ 
    $.get("stillAlive.php"); 
}, 60000);