1

問題の説明-特定のWebアプリユーザーがアクティブであるか(つまり、ログインしてサイトを使用しているか)、アクティブユーザーのリストを照会したり、ユーザーのアクティビティステータスを判断したりできるかどうかを知りたい。

制約-正確である必要はありません(つまり、ユーザーが特定の時間枠内でアクティブだった場合、ブラウザーを閉じていてもアクティブであると言ってもかまいません)。

この種の問題にはデザインパターンがあるはずですが、ここやWeb上の他の場所では何も見つかりませんでした。

私が検討しているアプローチ:

  1. ユーザーがアクション(またはアクションのサブセット)を実行するたびに更新されるテーブルを維持します。次に、あるしきい値の時間内にアクションを実行したユーザーを照会します。

  2. セッション情報を監視し、ログインしたユーザーと一定期間後にタイムアウトしたユーザーを一覧表示するテーブルを維持するようにしてください。

  3. これを行う他のより標準的な方法はありますか?

この問題にどのようにアプローチしますか(ここでも、デザインパターンの観点から)?

ありがとう!

4

2 に答える 2

1

テーブルではなくコンポーネントまたはモジュールの観点から考えると、それを維持するためのより多くの幸運があります。私の見方では、次のインターフェースが必要です。

public interface IActiveUsers {
  bool IsUserActive(User u);
}
public interface ITrackActiveUsers {
  void MarkUserAsActive(User u);
}

これらはデータベースを使用して実装できますが、選択したWebフレームワークの組み込みキャッシュを使用しないのはなぜですか?

基本的に、ユーザーをアクティブとしてマークするときは、「LoggedInUser-1234」のようなキーを使用してキャッシュにキーを挿入します。ここで、1234はユーザーの一意の識別子です。次に、必要なもの(5分、10など)のタイムアウトを設定し、値をtrueに設定します。次に、ユーザーがアクティブかどうかを照会するときに、キャッシュに同じキーの真の値が含まれているかどうかを確認します。

于 2010-04-19T21:29:28.753 に答える
0

私は#1があなたの問題の適切な解決策だと思います、そして私はまた一般的なものだと思います。これにより、ユーザーが「アクティブ」であると見なすHTTPリクエストを決定したり(つまり、「最後のアクティビティ」テーブルを更新するタイミングとかどうかを決定したり)、アクティビティを分類したり(「最後のXXXアクティビティ」列を増やしてそれぞれを更新したり)できます。ユーザーが別のアクションを実行した後)。

于 2010-04-19T20:22:31.167 に答える