可靠地统计到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是预先抓取页面并连接的,但从不断开。
所以两个问题:
- 这是一个很好的方法来计算连接(我永远不会在Web场环境中运行)?
- 这些来自Chrome的僵尸连接最终是否会超时(我尝试将超时设置为非常低,但仍然没有断开连接)?
答
事件总是会发生。如果他们不这样做,请在github上提供repro步骤的bug。要获得更准确的号码,您可以存储连接ID的哈希集并从中获取计数。