我正在创建一个显示测试环境状态的网络信息中心。
我使用集线器将浏览器连接到服务器,并具有轮询环境状态的后台任务。如果至少连接了一个客户端,我只想执行此检查。
我的中心看起来有点像这样:
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预先获取页面并进行连接,但从不断开连接。
所以有两个问题:
答案 0 :(得分:1)
事件总会激发。如果他们不这样做,请在github上提交repro步骤的错误。要获得更准确的数字,您可以存储连接ID的哈希集并从中获取计数。