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

问题描述:

我正在创建一个Web仪表板,它将显示我们的测试环境的状态。可靠地统计到SignalR集线器的客户端连接数

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

我的枢纽看起来有点像这样:

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的僵尸连接最终是否会超时(我尝试将超时设置为非常低,但仍然没有断开连接)?

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