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