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

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

本文关键字:用户 在线 状态 跟踪 崩溃 服务器 何跟踪 如果      更新时间:2023-09-26

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

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

根据我们的聊天和评论。

最好的选择是检查最后一个活动。因此,查看最后一条消息的发送时间以及是否发生在最后一条消息中,假设它们在线,如果没有活动,请将它们标记为离线。

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

ObjectId("507f191e810c19729de860ea").getTimestamp()

返回此日期对象

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

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

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

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