2

meteor-presenceを使用して、(現在ログインしている) オンライン ユーザーの数を単純に表示することは可能ですか?
コレクション内のドキュメントはMeteor.presencesデフォルトでは自分自身を削除しないことがわかりました。単純なMeteor.presences.find().count()ものは探している値ではありません...手動で削除する必要がありますか、それとも各ドキュメントにuserIDフィールドがあるかどうかを確認する必要がありますか?

編集:
私に何が起こっているのかをもう少し説明するために、2 つの異なるブラウザーで 2 人の異なるユーザーでログインしようとしました。呼び出した後Meteor.presences、コレクションに 2 つのドキュメントが表示されます。

docs: {
  djF3noxe3AhxDRfZw: {
    _id: "djF3noxe3AhxDRfZw",
    state: "online",
    userId: "SDeLPJzoabFt4Knei"
  }, {
  t4r2Q7KGKji4FPS9s: {
    _id: "t4r2Q7KGKji4FPS9s",
    state: "online",
    userId: "5zvYoC37aXSADGNEg"
  }
}

非アクティブ状態が数分間続くと、両方のドキュメントが同じように見えます。1 人のユーザーでログアウト (呼び出しMeteor.logout()) した後、(数分後でも) 2 つのドキュメントが残っています。唯一の違いは、そのうちの 1 つに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}});
});
4

3 に答える 3

1

これは、私が作成したパッケージhttps://github.com/mizzao/meteor-user-statusを使用して簡単に実行できます。ユーザーを二重にカウントすることはなく、値を表示または公開するだけです

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

また、ユーザーが切断またはログオフするとすぐに更新されます。

于 2014-03-13T03:32:25.450 に答える
0

タイムアウト期間 (10 秒) が経過すると、ドキュメントは自動的に削除されます。https://github.com/tmeasday/meteor-presence/blob/master/presence_server.js#L1

于 2013-05-06T16:54:41.473 に答える