2016-09-18 8 views
0

私はSignalRで訪問者カウンタを実装しようとしています。静的変数は、新しい訪問者が到着するたびに増分され、訪問者が建物を出るたびに減少します。私は接続がセッション固有であるかどうか疑問に思うので、新しいセッションが作成されるたびにカウンタを増やし、セッションがもはや接続されなくなったときにカウンタを減らすことができます。セッション固有のSIgnalR接続は可能ですか?

これは、すでにログインしているときにブラウザの最初のタブにログインすると、カウンタが増分され、ブラウザの最後のタブが閉じられるたびにカウンタが減分されることを意味します。次のように私はそれを行うことができます。サーバー上で

  • を私は現在のセッションがであるかどうかをチェックしますアライブ接続
  • を持つすべてのセッションなどのタブが開かれるたびに、サーバーのメソッドが呼び出されると、保存しますストレージがある場合は、タブ数をインクリメントする
  • このようなタブが閉じられると、サーバメソッドが呼び出され、タブ数が減少し、0の場合はストレージからセッションが削除されます。
  • 接続が失われると(ブラウザが閉じられ、インターネット接続が失われたなど)、セッションはストレージから削除されます

これはSignalRで可能かどうか疑問に思うので、SignalRはsessionidへの接続を追跡します。それは...ですか?

答えて

2

クラスを使用していることを考慮すると、OnConnectedOnDisconnectedなどのサーバーサイドイベントと対応するハンドラーを使用することでこれを行うことができます。

public class ContosoChatHub : Hub 
{ 
    public override Task OnConnected() 
    { 
     //this is called after connection is started. 
     return base.OnConnected(); 
    } 

    public override Task OnDisconnected() 
    { 
     //called when the connection is disconnected. 
     return base.OnDisconnected(); 
    } 
} 

詳細については、How to handle connection lifetime events in the Hub classをご確認ください。

更新:新しい接続が行われるたびに、OnConnectedがSignalRフレームワークによって自動的に呼び出されます。静的変数を増やすことができます。 OnDisconnectedでは、接続が破棄または停止されるたびに呼び出される変数を減らすことができます。

これ以外にも、User,Group、および接続情報をSQL Serverなどの外部メモリに保存して明示的に追跡することができます。

+0

申し訳ありませんが、私は質問を混ぜていました。 –

+0

アイデアを具体化することはできますか? –

+0

@LajosArpad更新された回答を確認してください。 –

関連する問題