現在接続しているすべてのユーザーのリストを取得する方法はありますか? 多くのチャットルーム チュートリアルを確認しましたが、この方法論を提供するものはありません。それは可能ですか?もしそうなら、Meteorの方法で正しく実装するにはどうすればよいですか?
6 に答える
非効率なキープアライブを使用せずにこれを行う方法を見つけることができました。基本的に、ユーザーのログインまたは再接続はprofile.online
true に設定され、ログアウトまたは切断は false に設定されます。Meteorite スマート パッケージとして追加して、ここで試すことができます。
https://github.com/mizzao/meteor-user-status
修正または改善を歓迎します。
これは、ユーザーのログイン時にオンライン プロパティを設定し、定期的に (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);
古い質問ですが、これを調べている人には、クライアントからサーバーへの接続を監視する流星パッケージがあります。これは meteor user status と呼ばれ、githubで見つけることができます。
この場合の私の推奨事項danimal:userpresence
は、さらにいくつかの利点があるためです。
- 複数のサーバーでユーザーのオンライン ステータスを追跡する
- httpHeaders が含まれているため、受信者が送信メッセージをチェックしたかどうかを確認したい場合
- 読むのが非常に簡単なコード
私がやっていることは、流星アプリのブラウザー タブにフォーカスがあるとき、またはフォーカスを失ったときに、ユーザーのオンライン ステータスを記録することです。次に、オンラインのユーザーをフィルタリングします。より良い解決策があるはずですが、これは機能します。
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