我们正在构建一个聊天应用程序,目前正在使用一个系统来查看给定房间中的所有用户。
我们设置了一个Mongo文档,其中包含active_users
数组,我们将push
和pull
个用户名,以便跟踪在线用户。我们得出的结论是,实现用户已连接到给定房间非常简单。我们需要做的只是在路由器中,当用户访问该页面时,我们将push
该用户的名字放入文档中。
现在,棘手的部分是在用户离开该给定页面时意识到了什么?显然jQuery不是一个可靠的选项,所以我们如何知道用户与特定页面的连接何时被破坏?
答案 0 :(得分:0)
你可以这样做:
Meteor.publish("page", function() {
this._session.socket.on("close", function() {
//Change your active users here
});
});
以及您追踪的网页
Meteor.subscribe('page');
我在大气层analytics
包中使用它
答案 1 :(得分:0)
有一个名为Presence的Atmosphere软件包可以完全满足您的需求。
自述文件中有关跟踪自定义状态的一些额外细节......
如果您想要追踪的不仅仅是用户'在线状态,您可以设置自定义状态功能。 (默认状态函数仅返回'online'
):
// Setup the state function on the client
Presence.state = function() {
return {
online: true,
currentRoomId: Session.get('currentRoomId')
};
}
现在我们可以简单地查询集合以查找共享相同currentRoomId的所有其他用户
Presences.find({ state: { online: true, currentRoomId: Session.get('currentRoomId') } })
当然,在场会反复调用你的功能,所以每当事情发生变化时,每个人都会知道。
答案 2 :(得分:0)
Meteor有connection hooks,因此您可以在用户断开与服务器的连接时运行一个功能。在客户端调用的方法中设置onClose()回调将允许您关闭函数中的userId。
服务器上的代码可能是这样的:
Meteor.methods({
joinRoom: function( roomId ){
var self = this;
Rooms.update( {roomId: roomId}, {$push:{userId: self.userId}});
self.connection.onClose( function(){
Rooms.update( {roomId: roomId}, {$pull:{userId: self.userId}})
});
}
});