如果服务器崩溃,如何跟踪用户的“在线”状态?

我有多个heroku dynos和一个聊天应用程序。 当用户login时,他们的状态在MongoDB中设置为“联机”。 但是,如果服务器崩溃,他们的状态将仍然设置为在线。 如何在服务器崩溃时将用户状态更新为“脱机”?

如果我只有一个测功机,这将是容易的。 我只是更新每个用户在服务器启动时“离线”。 不幸的是,这对多个服务器来说是不可能的。

根据我们的聊天和评论。

最好的select是去检查最后的活动。 因此,看看最后一条消息的发送时间,以及最后一条消息发生的时间,如果没有任何活动将它们标记为脱机状态,则说明它们在线5分钟。

就像我在评论中提到的那样,如果你不在消息文档中存储一个date_created ,你将不需要改变任何东西,因为_id存储时间戳

 ObjectId("507f191e810c19729de860ea").getTimestamp() 

返回这个Date对象

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

这个答案是另一种select(如果你想保持他们在线,即使他们没有发送消息):

如果你想知道他们仍然是活跃的,即使他们不是每页跳一跳,包括一点JavaScript来ping你的服务器每60秒左右,让你知道他们还活着。 它的工作原理与我原来的build议一样,但是它会更新您的logging,而不需要每五分钟至less一次疯狂地浏览您的网站。

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