テスト環境のステータスを表示するWebダッシュボードを作成しています。
ハブを使用してブラウザーをサーバーに接続し、環境のステータスをポーリングするバックグラウンドタスクを実行します。少なくとも1つのクライアントが接続されている場合にのみ、このチェックを実行したいと思います。
私のハブは少しこのように見えます:
public class StatusHub : Hub
{
private static int connectionCount = 0;
public override Task OnConnected()
{
Interlocked.Increment(ref connectionCount);
return base.OnConnected();
}
public override Task OnReconnected()
{
Interlocked.Increment(ref connectionCount);
return base.OnReconnected();
}
public override Task OnDisconnected()
{
Interlocked.Decrement(ref connectionCount);
return base.OnDisconnected();
}
// other useful stuff
}
これは主に機能しますが、OnConnectedが呼び出されることもありますが、OnDisconnectedは呼び出されません。
1つの特定のケースは、Chromeを開いてページのアドレスを入力したが、実際にはそのページに移動しない場合です。Chromeはページをプリフェッチして接続しているようですが、切断されていないようです。
したがって、2つの質問:
- これは接続をカウントするための良いアプローチですか(Webファーム環境で実行することは決してありません)?
- Chromeからのこれらのゾンビ接続は最終的にタイムアウトしますか(タイムアウトを非常に低く設定しようとしましたが、それでも切断されませんでした)?