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

时间:2015-01-09 02:20:05

标签: javascript node.js mongodb heroku socket.io

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

如果我只有一个dyno,这很容易。我只是在服务器启动时将每个用户更新为“离线”。不幸的是,多台服务器无法做到这一点。

1 个答案:

答案 0 :(得分:2)

根据我们的聊天和评论。

最好的选择是检查最后一项活动。因此,看看最后一条消息的发送时间以及是否发生在最后一条消息中,如果没有任何活动将它们标记为离线,则说它们在线时间为5分钟。

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

ObjectId("507f191e810c19729de860ea").getTimestamp()

返回此Date对象

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

answer是另一种选择(如果您希望将它们保持在线状态,即使它们不发送消息):

  

如果你想知道他们仍然活跃,即使他们没有从一个页面跳到另一个页面,请每60秒左右包含一些javascript来ping你的服务器,让你知道他们还活着。它的工作方式与我原来的建议相同,但它会更新您的记录,而不要求他们至少每五分钟疯狂浏览一次您的网站。

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