SignalR - 检查用户是否仍然连接(SignalR - Checking if a user

2019-07-04 11:47发布

我有方法的轮毂被称为客户端。 这种方法启动一个定时器与每10秒运行的委托。 因为它没有任何意义,以保持如果没有人连接到集线器上运行此委托,我要检查是否有用户仍然从委托内部连接之前,我重新计划。 有没有办法做到这一点?

Answer 1:

也许是最常用的解决办法是保持一个静态变量包含当前的用户连接和覆盖OnConnectOnDisconnect或实施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)
    {
        return base.OnDisconnected(stopCalled);
    }

    // In your delegate check the count of users in your list.
}


Answer 2:

如果您保存您的ConnectionId在你的数据库,你可以检查此:

var heartBeat = GlobalHost.DependencyResolver.Resolve<ITransportHeartbeat>();

var connectionAlive = heartBeat.GetConnections().FirstOrDefault(c=>c.ConnectionId == connection.ConnectionId);

if (connectionAlive.IsAlive)
{
//Do whatever...
}


Answer 3:

从http://forums.asp.net/t/1829432.aspx/1?How+do+I+get+list+of+connected+clients+on+signalr+

IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.notify("Hello world");

所以,你应该能够得到context.Clients.Count。

这帖子还引用了维基其中有很多好消息。 你可以尝试使用OnConnected / OnDisconnected例子来跟踪用户,当你到零个用户停止你的电话。



文章来源: SignalR - Checking if a user is still connected