是否可以简单地使用meteor-presence显示多个在线用户(当前已登录
我发现Meteor.presences
集合中的文档在缺省情况下不会删除自身,所以简单的Meteor.presences.find().count()
不是我想要的值……我应该手动删除它们,还是应该检查每个文档是否都有userID
字段?
编辑:
为了说明我身上发生了什么,我尝试用两个不同的用户在两个不同的浏览器中登录。在调用Meteor.presences
之后,我可以在集合中看到两个文档,例如
docs: {
djF3noxe3AhxDRfZw: {
_id: "djF3noxe3AhxDRfZw",
state: "online",
userId: "SDeLPJzoabFt4Knei"
}, {
t4r2Q7KGKji4FPS9s: {
_id: "t4r2Q7KGKji4FPS9s",
state: "online",
userId: "5zvYoC37aXSADGNEg"
}
}
几分钟不活动后,两个文档看起来是一样的。在使用一个用户注销(调用Meteor.logout()
)之后,我仍然有两个文档(甚至在几分钟后),唯一的区别是其中一个文档没有更多的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}});
});
发布于 2013-05-30 22:47:48
我也看到了同样的事情,也把我搞糊涂了。但仔细想想,访问者在查看页面时也是一种存在,但没有userId。因此,任何访问者都会出现在集合中是有意义的。
如果您只想查看已登录的用户,可以将筛选条件更改为
var filter = {userId: {$exists: true}};
发布于 2014-03-13 11:32:25
您可以使用我创建的包https://github.com/mizzao/meteor-user-status轻松做到这一点。它不会重复计算用户,您可以只显示或发布值
Meteor.users.find({ "status.online": true }).count()
当用户断开连接或注销时,它也会立即更新。
发布于 2013-05-07 00:54:41
https://stackoverflow.com/questions/16399666
复制相似问题