我正在创建一个 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 正在预取页面并连接,但从未断开连接。
所以两个问题:
- 这是计算连接数的好方法吗(我永远不会在网络农场环境中运行)?
- 这些来自 Chrome 的僵尸连接最终会超时吗(我尝试将超时设置得很低但仍然没有断开连接)?