可靠地计算到SignalR集线器的客户端连接数

时间:2012-11-23 12:24:31

标签: signalr signalr-hub

我正在创建一个显示测试环境状态的网络信息中心。

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

我的中心看起来有点像这样:

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. 这是计算连接的好方法(我永远不会在Web场环境中运行)吗?
  2. 来自Chrome的这些僵尸连接最终是否会超时(我尝试将超时设置得很低但仍然没有断开连接)?

1 个答案:

答案 0 :(得分:1)

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