4

我正在创建一个 Web 仪表板,它将显示我们的测试环境的状态。

我使用集线器将浏览器连接到服务器,并有一个后台任务来轮询环境的状态。如果至少连接了一个客户端,我只想执行此检查。

我的集线器看起来有点像这样:

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。

一种特殊情况是,如果我打开 chrome 并键入页面地址,但实际上并没有导航到它。似乎 Chrome 正在预取页面并连接,但从未断开连接。

所以两个问题:

  1. 这是计算连接数的好方法吗(我永远不会在网络农场环境中运行)?
  2. 这些来自 Chrome 的僵尸连接最终会超时吗(我尝试将超时设置得很低但仍然没有断开连接)?
4

1 回答 1

1

事件将始终触发。如果他们不这样做,请在 github 上使用 repro 步骤提交错误。要获得更准确的数字,您可以存储连接 ID 的哈希集并从中获取计数。

于 2012-11-23T22:40:46.280 回答