4

テスト環境のステータスを表示する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つの質問:

  1. これは接続をカウントするための良いアプローチですか(Webファーム環境で実行することは決してありません)?
  2. Chromeからのこれらのゾンビ接続は最終的にタイムアウトしますか(タイムアウトを非常に低く設定しようとしましたが、それでも切断されませんでした)?
4

1 に答える 1

1

イベントは常に発生します。そうでない場合は、githubで再現手順を使用してバグを報告してください。より正確な数を取得するには、接続IDのハッシュセットを保存し、そこからカウントを取得します。

于 2012-11-23T22:40:46.280 に答える