首页 > 解决方案 > 热门获取 SignalR 核心组中的连接数

问题描述

如何获取特定 SignalR Core 组中的连接数?

像这样的东西:

this.Clients.Group("Something").Count();

SendAsync如果返回有多少客户端发送消息也会很好:

var count = await this.Clients.Client(this.Context.ConnectionId).SendAsync("msg", msg);

我需要这个来确定组是否为空。如果用户用力从 SignalR Core 断开连接(拔下网线),数据应该是正确的......

标签: signalrasp.net-core-signalr

解决方案


您可以使用 OnConnected 和 OnDisconnected 事件并保存连接/connectionIds。

我使用类似这样的附加信息:

internal static ConcurrentDictionary<string, ConnectionInfos> Users = new ConcurrentDictionary<string, ConnectionInfos>();

public override async Task OnConnectedAsync()
{
    var connId = Context.ConnectionId;
    if (!Users.Keys.Any(x => x == connId))
    {
        Users.TryAdd(connId, new ConnectionInfos { /*...*/});
    }
    await base.OnConnectedAsync();
}

public override async Task OnDisconnectedAsync(Exception exception)
{
    var id = Context.ConnectionId;
    if (Users.TryRemove(id, out ConnectionInfos ci))
    {
        //Connection removed
    }
    await base.OnDisconnectedAsync(exception);
}

推荐阅读