0

現在、ユーザーがロビーに入り、グループに配置され、さまざまなページで対話する SignalR アプリケーション (SQL Server 2008 R2 Express を使用する IIS7 で ASP.Net MVC4 を使用) を構築しています。

Html5 LocalStorage はすべての参加者の要件であるため、クライアント側にグループ情報を保存できます。

SignalR グループ メンバーシップに関連するアプリケーション設計について、次の 2 つの質問があります。

  1. グループ メンバーシップをサーバーに保存する最良の方法は何ですか? シングルトン変数、グループ ID と接続 ID を持つデータベース、または何か別のものですか? データベースは、SQL Server Express と約 100 ~ 200 人のユーザーで問題になりますか?

  2. ページの変更中に何が変更され、起動されるか? グループ メンバーシップを手動で更新する必要がありますか?

4

2 に答える 2

5
  1. そのためにmsopentech.redisを使用します。データを永続化する非常に高速なキャッシュ。(グーグルで多くの情報が見つかりました)booksleeve(signalrチームもそれを使用しています)またはservicestack.redisを使用してアクセスできます。このようにして、それを静的変数に入れたり、データベース呼び出しを遅らせたりする必要がなくなります。

  2. 同じサイトでページが変更されるたびに、切断と接続が行われます。connectionID は異なるため、接続 ID を何らかのメカニズムでログインしているユーザーにマップし、それを保持する必要があります。それは、ブロードキャストの代わりに個々のメッセージを送信できるようにしたい場合です。

于 2013-04-07T08:14:42.327 に答える
1

(1) セッションのグループ情報のみを永続化する場合は、Hub/Persistent Connection クラスで静的変数を使用して、グループに関する情報を保存することを検討する必要があります (メモリ要件が許す場合)。たとえば、接続 ID とグループの間のディクショナリ/マップ。アプリ ドメインの再起動時や Web ファーム内などの場合、静的は保持されないことに注意することが重要です。

これを回避するには、グループ情報をデータベースに保存するだけで、アプリ ドメインの再起動中に失われる心配はありません。

また、SignalR ソリューションのチャット サンプルも参照してください。これは、静的変数を使用して、さまざまなユーザーがどのチャット ルームにいるかに関する情報を保持します。

(2) 同じアプリ内の別のページから新しい接続を確立すると、接続 ID が異なります。ページを更新すると、切断イベントが発生し、別の ID で再度接続されます。このような場合、アプリでセッション管理メカニズムを手動で使用して、新しい接続 ID をユーザーにマップする必要があります。

于 2013-04-07T06:15:18.400 に答える