12

現在接続しているすべてのユーザーのリストを取得する方法はありますか? 多くのチャットルーム チュートリアルを確認しましたが、この方法論を提供するものはありません。それは可能ですか?もしそうなら、Meteorの方法で正しく実装するにはどうすればよいですか?

4

6 に答える 6

18

非効率なキープアライブを使用せずにこれを行う方法を見つけることができました。基本的に、ユーザーのログインまたは再接続はprofile.onlinetrue に設定され、ログアウトまたは切断は false に設定されます。Meteorite スマート パッケージとして追加して、ここで試すことができます。

https://github.com/mizzao/meteor-user-status

修正または改善を歓迎します。

于 2013-06-21T22:51:03.027 に答える
3

これは、ユーザーのログイン時にオンライン プロパティを設定し、定期的に (10 秒ごとに) ping を実行して非アクティブなユーザーをオフラインに設定することで実現しました。理想的ではありませんが、機能します。Meteor でこの機能を見てみたいです。これがping機能です。

Meteor.setInterval(function () {
  var now = (new Date()).getTime();
  OnlineUsers.find({'active':true,'lastActivity': {$lt: (now - 30 * 1000)}}).forEach(function (onlineActivity) {
    if(onlineActivity && onlineActivity.userId) {
      OnlineUsers.update({userId:onlineActivity.userId},{$set: {'active': false}});
      Meteor.users.update(onlineActivity.userId,{$set: {'profile.online': false}});
    }
  });
}, 10000);
于 2012-11-23T05:55:15.500 に答える
1

古い質問ですが、これを調べている人には、クライアントからサーバーへの接続を監視する流星パッケージがあります。これは meteor user status と呼ばれ、githubで見つけることができます。

于 2015-02-20T06:18:59.673 に答える
0

この場合の私の推奨事項danimal:userpresenceは、さらにいくつかの利点があるためです。

  • 複数のサーバーでユーザーのオンライン ステータスを追跡する
  • httpHeaders が含まれているため、受信者が送信メッセージをチェックしたかどうかを確認したい場合
  • 読むのが非常に簡単なコード
于 2016-12-03T10:26:53.750 に答える
0

私がやっていることは、流星アプリのブラウザー タブにフォーカスがあるとき、またはフォーカスを失ったときに、ユーザーのオンライン ステータスを記録することです。次に、オンラインのユーザーをフィルタリングします。より良い解決策があるはずですが、これは機能します。

if Meteor.is_client
  Meteor.startup ->
    $(window).focus ->
      Meteor.call 'online', true

    $(window).blur ->
      Meteor.call 'online', false
else
  Meteor.methods
    online: (isOnline=true) ->
      Meteor.users.update Meteor.userId(), $set: online: isOnline

次に、使用できます

Meteor.users.find online: true

オンライン ユーザーをフィルタリングします。

ところで、オンライン フィールドでユーザーを公開することを忘れないでください。

Meteor.publish null, ->
  Meteor.users.find {}, fields: online: 1
于 2012-11-07T00:15:34.547 に答える