我有多个heroku dynos和一个聊天应用程序。当用户登录时,他们的状态在MongoDB中设置为“在线”。但是,如果服务器崩溃,其状态仍将设置为在线。当服务器崩溃时,如何将用户状态更新为“脱机”?
如果我只有一个dyno,这很容易。我只是在服务器启动时将每个用户更新为“离线”。不幸的是,多台服务器无法做到这一点。
答案 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);