如果服务器崩溃,我如何跟踪用户的 "online" 状态?

How can I track "online" statuses of users if a server crashes?

我有多个 heroku dynos 和一个聊天应用程序。当用户登录时,他们的状态在 MongoDB 中设置为 "online"。但是,如果服务器崩溃,它们的状态仍将设置为在线。当服务器崩溃时,如何将用户状态更新为 "offline"?

如果我只有一台测功机,这会很容易。服务器启动时,我只是将每个用户更新为 "offline" 。不幸的是,这对于多个服务器是不可能的。

根据我们的聊天和评论。

最好的选择是检查最后一个 activity。所以看看最后一条消息是什么时候发送的,如果它发生在最后一次让我们说他们在线,如果没有 activity 将他们标记为离线。

就像我在评论中提到的那样,如果您没有在消息文档中存储 date_created,则无需更改任何内容,因为 _id 存储时间戳

ObjectId("507f191e810c19729de860ea").getTimestamp()

那个returns这个日期对象

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

这个 answer 是另一种选择(如果您想让他们保持在线状态,即使他们不发送消息):

If you would like to know they are still active even when they're not jumping from page to page, include a bit of javascript to ping your server every 60 seconds or so to let you know they are still alive. It'll work the same way as my original suggestion, but it will update your records without requiring them to be frantically browsing your site at least once every five minutes.

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