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″/>