通过流星形式吸引大量在线用户

时间:2013-05-06 13:20:10

标签: meteor

是否可以使用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}});
});

3 个答案:

答案 0 :(得分:1)

我看到了同样的事情,也让我很困惑。但是当你考虑它时,看到该页面的访问者也是一个存在,但没有userId。所以任何访客都会出现在收藏中是有道理的。

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

var filter = {userId: {$exists: true}};

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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