Meteor,获取特定页面上的所有用户

时间:2014-06-24 21:11:53

标签: meteor user-presence

我们正在构建一个聊天应用程序,目前正在使用一个系统来查看给定房间中的所有用户。

我们设置了一个Mongo文档,其中包含active_users数组,我们将pushpull个用户名,以便跟踪在线用户。我们得出的结论是,实现用户已连接到给定房间非常简单。我们需要做的只是在路由器中,当用户访问该页面时,我们将push该用户的名字放入文档中。

现在,棘手的部分是在用户离开该给定页面时意识到了什么?显然jQuery不是一个可靠的选项,所以我们如何知道用户与特定页面的连接何时被破坏?

3 个答案:

答案 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}})
    });    
  }
});