edo*_*bry 10 c# asp.net timer signalr signalr-hub
我有一个方法集线器,称为客户端.此方法启动一个带有委托的计时器,该委托每10秒运行一次.如果在没有人连接到集线器的情况下继续运行此委托是没有意义的,我想在重新计划之前检查是否有任何用户仍然从委托内部连接.有没有办法做到这一点?
cil*_*arl 16
可能最常用的解决方案是保留一个静态变量,其中包含当前连接的用户,OnConnect并根据您使用的版本覆盖和/ OnDisconnect或实现IDisconnect.
你会实现这样的事情:
public class MyHub : Hub
{
private static List<string> users = new List<string>();
public override Task OnConnected()
{
users.Add(Context.ConnectionId);
return base.OnConnected();
}
//SignalR Verions 1 Signature
public override Task OnDisconnected()
{
users.Remove(Context.ConnectionId);
return base.OnDisconnected();
}
//SignalR Version 2 Signature
public override Task OnDisconnected(bool stopCalled)
{
users.Remove(Context.ConnectionId);
return base.OnDisconnected(stopCalled);
}
// In your delegate check the count of users in your list.
}
Run Code Online (Sandbox Code Playgroud)
che*_*xis 13
如果将connectionId保存在数据库中,则可以检查:
var heartBeat = GlobalHost.DependencyResolver.Resolve<ITransportHeartbeat>();
var connectionAlive = heartBeat.GetConnections().FirstOrDefault(c=>c.ConnectionId == connection.ConnectionId);
if (connectionAlive.IsAlive)
{
//Do whatever...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21601 次 |
| 最近记录: |