SignalR で接続が切れた時にセッションクローズされず残り続ける問題への対応方法

投稿者: | 10月 18, 2015

SignalR では、クライアント側が閉じたとしても検知する術がありません。
例えば、Websocketのコネクションが失敗したら、OnCloseコールバックが呼ばれますが、クライアント側の状態によっては、OnCloseが呼ばれずに接続が残り続けてしまうことがあります。

そこで登場するのが、IIS WebSocket のping/pnogです。

/signalr/ping リクエストは、ASP.NETセッションを維持するのに利用されます。
通常は、セッションタイムアウトよりも短い感覚でリクエストを生成し、セッションが切れないようにします。

SignalR は、既定で5分毎にpingリクエストを送信します。
5分は、ASP.NETの既定のセッションタイムアウト時間20分よりも短く設定されています。

ping送信間隔を5分から変更したい場合は、$.connection.hub.startを使用します。

// Configure SignalR to ping the server every minute
$.connection.hub.start({ pingInterval: 60000 })//…

尚、既定では、pingIntervalは、300000ミリ秒(5分)が設定されています。

ちなみに、web.configで設定することもできます。まずは次のコマンドを発行します。

cd \Windows\System32\inetsrv
appcmd unlock config /section:system.webServer/websocket

web.configで以下の記述を追加します。

<webSocket enabled=”true” pingInterval=”00:00:05″/>

カテゴリー: IIS

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください