2

是否可以使用meteor-presence简单地显示一些在线用户(当前已登录)?
我看到Meteor.presences集合中的文档默认情况下不会删除自己,所以简单Meteor.presences.find().count()不是我正在寻找的值......我应该手动删除它们还是应该检查每个文档是否有userID字段?

编辑:
为了更多地说明发生在我身上的事情,我尝试在 2 个不同的浏览器中使用 2 个不同的用户登录。调用后,Meteor.presences我可以在我的收藏中看到两个文档,例如

docs: {
  djF3noxe3AhxDRfZw: {
    _id: "djF3noxe3AhxDRfZw",
    state: "online",
    userId: "SDeLPJzoabFt4Knei"
  }, {
  t4r2Q7KGKji4FPS9s: {
    _id: "t4r2Q7KGKji4FPS9s",
    state: "online",
    userId: "5zvYoC37aXSADGNEg"
  }
}

几分钟不活动后,两个文档看起来都一样。与一个用户注销(调用Meteor.logout())后,我仍然有 2 个文档(即使在几分钟后),唯一的区别是其中一个没有更多userID

docs: {
  djF3noxe3AhxDRfZw: {
    _id: "djF3noxe3AhxDRfZw",
    state: "online"
  }, {
  t4r2Q7KGKji4FPS9s: {
    _id: "t4r2Q7KGKji4FPS9s",
    state: "online",
    userId: "5zvYoC37aXSADGNEg"
  }
}

只有在关闭该浏览器窗口后,相关文档才会自行删除。
因此,如果我Meteor.presences.find().count()在两个窗口都打开时调用,我总是会得到2回报,无论用户的在线/离线状态如何。

我目前使用的所有代码都是示例中的代码:

Meteor.publish('userPresence', function() {
  var filter = {}; 
  return Meteor.presences.find(filter, {fields: {state: true, userId: true}});
});
4

3 回答 3

1

我看到了同样的事情,这也让我感到困惑。但是当您考虑它时,查看页面的访问者也是存在的,但没有用户 ID。因此,任何访问者都会出现在集合中是有道理的。

如果您只想查看登录用户,您可以将过滤器更改为

var filter = {userId: {$exists: true}};
于 2013-05-30T14:47:48.187 回答
1

您可以使用我创建的包https://github.com/mizzao/meteor-user-status轻松完成此操作。它不会重复计算用户,您可以只显示或发布值

Meteor.users.find({ "status.online": true }).count()

当用户断开连接或注销时,它也会立即更新。

于 2014-03-13T03:32:25.450 回答
0

文档会在超时时间(10 秒)后自行删除。https://github.com/tmeasday/meteor-presence/blob/master/presence_server.js#L1

于 2013-05-06T16:54:41.473 回答