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

标签 javascript node.js mongodb heroku socket.io

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

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

最佳答案

根据我们的聊天和评论。

最好的选择是检查上次事件。因此,查看最后一条消息的发送时间以及它是否发生在最后一条消息中(假设 5 分钟内他们在线),如果没有事件,则将他们标记为离线。

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

ObjectId("507f191e810c19729de860ea").getTimestamp()

返回这个 Date 对象

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);

关于javascript - 如果服务器崩溃,如何跟踪用户的 "online"状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27852879/

相关文章:

javascript - JavaScript 保证输出 "[object X]"吗?

javascript - 迭代 2 个对象,如果匹配则相乘一些属性

node.js - 在 Centos 上找不到本地咕噜声

node.js - Mongoose 密码哈希

Mongodb - 通过 ODBC 连接

mongodb - 在 MongoDB 中查找具有不包含具有特定字段值的文档的数组的文档

javascript - 更改滑动菜单的滑动方向和位置

javascript - 我需要在以下 JavaScript 代码中导出辅助函数吗?

javascript - 为什么这些日期从 MongoDb 获取后结果为 'Invalid Dates'?

Javascript:从属性匹配但没有 forEach 的数组中删除前 X 项?